Потенциальная утечка памяти в коде веб-приложения

Microsoft.Windows.InternetInformationServices.6.2.ApplicationPool.MemoryLeak.Monitor (UnitMonitor)

Этот монитор рассматривает события, сохраненные в журнале при перезапуске пула приложений в результате превышения настроенных порогов памяти, и изменяет свое состояние на "Предупреждение", если пул приложений перезапускается чересчур часто (в зависимости от конфигурации монитора). Это монитор со сбросом вручную, а это значит, что он не переключится в состояние "Исправно" автоматически. Чтобы переключить монитор в состояние "Исправно", понадобится произвести сброс монитора при помощи анализатора работоспособности.

Knowledge Base article:

Краткое описание

Пул приложений перезапускается чересчур часто, так как потребление виртуальной или физической памяти достигло установленного предела. Это может указывать на утечку памяти в коде, выполняемом пулом приложений.

Конфигурация

Этот монитор работает путем поиска определенного количества событий перезапуска пула приложений по причине достижения установленного порога использования памяти (этот параметр настроен в Средствах администрирования IIS). Для этого монитора можно настроить два параметра. Первый — "Число экземпляров" — это количество возникновения событий, которые отслеживает монитор, в пределах установленного интервала времени. Второй параметр — "Число минут" — это интервал времени, в рамках которого монитор производит поиск возникновения событий.

Причины

Решения

Проверка и настройка параметров предела для пула приложений при помощи Диспетчера службы IIS:

Примечание. Так как этот монитор является монитором со сбросом вручную, после устранения проблемы понадобится сбросить состояние монитора при помощи анализатора работоспособности. Это можно сделать, щелкнув правой кнопкой мыши на мониторе, и выбрав пункт меню "Сброс состояния работоспособности". Если не выполнить сброс состояния монитора вручную, он не вернется в состояние "Исправно".

Element properties:

TargetMicrosoft.Windows.InternetInformationServices.6.2.ApplicationPool
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.InternetInformationServices.6.2.RepeatedEventLogManualReset2StateMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Потенциальная утечка памяти в коде веб-приложения
Пул приложений {0} на сервере {1} перезапущен несколько раз по причине превышения порогов памяти, указанных для этого пула приложений. Это может указывать на утечку памяти внутри кода веб-приложения.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.InternetInformationServices.6.2.ApplicationPool.MemoryLeak.Monitor" Accessibility="Public" Enabled="true" Target="Microsoft.Windows.InternetInformationServices.6.2.ApplicationPool" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.Windows.InternetInformationServices.6.2.RepeatedEventLogManualReset2StateMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.Windows.InternetInformationServices.6.2.ApplicationPool.MemoryLeak.Monitor_AlertMessageResourceID">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="IISCommon!Microsoft.Windows.InternetInformationServices.ApplicationPool"]/PoolID$</AlertParameter1>
<AlertParameter2>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</AlertParameter2>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="PotentialMemoryLeakDetected" MonitorTypeStateID="RepeatedEventRaised" HealthState="Warning"/>
<OperationalState ID="Healthy" MonitorTypeStateID="ManualResetEventRaised" HealthState="Success"/>
</OperationalStates>
<Configuration>
<RepeatedComputerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</RepeatedComputerName>
<RepeatedLogName>System</RepeatedLogName>
<RepeatedExpression>
<And>
<Expression>
<RegExExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>MatchesRegularExpression</Operator>
<Pattern>^(5117|5077)$</Pattern>
</RegExExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-WAS</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">Params/Param[2]</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">$Target/Property[Type="IISCommon!Microsoft.Windows.InternetInformationServices.ApplicationPool"]/PoolID$</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</RepeatedExpression>
<NumberOfSeconds>3600</NumberOfSeconds>
<NumberOfOccurrences>10</NumberOfOccurrences>
</Configuration>
</UnitMonitor>