Possível perda de memória no código de aplicativo Web

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

Este monitor olha os eventos registrados quando o pool de aplicativos é reciclado por exceder os limites de memória configurados e alterará seu estado para um aviso se o pool de aplicativos for reciclado com muita frequência (com base na configuração do monitor). Este é um monitor de redefinição manual o que significa que não será alternado para o estado íntegro automaticamente. Para alternar o monitor para o estado íntegro será necessário redefinir o monitor usando o gerenciador de integridade.

Knowledge Base article:

Resumo

O pool de aplicativos é reciclado com muita frequência porque seu consumo de memória física ou virtual atingiu o limite configurado. Isso pode indicar que existe uma perda de memória dentro do código que o pool de aplicativos está executando.

Configuração

Este monitor trabalha procurando o número de eventos de reciclagem do pool de aplicativos por atingir o limite configurado de uso da memória (isso é configurado nas ferramentas de administração do IIS). Dois parâmetros podem ser configurados neste monitor. O primeiro é "Número de ocorrências", o número de vezes que os eventos procurados pelo monitor precisam ocorrer no intervalo de tempo configurado. O segundo parâmetro é "Número de minutos", o intervalo de tempo no qual o monitor procura as ocorrências dos eventos.

Causas

Resoluções

Para verificar ou definir as configurações dos limites do pool de aplicativos usando o Gerenciador do IIS:

Observação: como este é um monitor de redefinição manual, depois de corrigir o problema será necessário redefinir o estado do monitor no Gerenciador de Integridade. Para fazer isso, clique com o botão direito do mouse no monitor e selecione o item de menu "Redefinir integridade". Se você não redefinir manualmente o monitor, ele não alternará para o estado íntegro.

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
Possível perda de memória no código de aplicativo Web
O pool de aplicativos {0} no servidor {1} foi reiniciado diversas vezes por exceder os limites de memória especificados para este pool de aplicativos. Isso pode indicar uma perda de memória dentro do código do aplicativo Web.
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>