Posible pérdida de memoria en el código de la aplicación web

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

Este monitor contempla los eventos registrados cuando el grupo de aplicaciones se recicla debido a que se exceden los umbrales de memoria configurados y cambiará su estado para advertir si el grupo de aplicaciones se recicla con demasiada frecuencia (según la configuración del monitor). Este es una monitor de restablecimiento manual lo que significa que no cambiará al estado correcto de manera automática. Para que el monitor cambie al estado correcto, tendrá que restablecerlo mediante el explorador de estado.

Knowledge Base article:

Resumen

El grupo de aplicaciones se recicla con demasiada frecuencia porque su consumo de memoria virtual o física alcanzó el limite configurado. Esto podría ser indicativo de una pérdida de memoria en el código que está ejecutando el grupo de aplicaciones.

Configuración

Este monitor lo que hace es buscar varios eventos de reciclaje de grupo de aplicaciones por haber alcanzado el umbral configurado del uso de memoria (se configura en las herramientas de administración de IIS). Existen dos parámetros configurables para este monitor. El primero es el "Número de repeticiones"; se trata del número de veces que los eventos que el monitor busca se deben producir en el intervalo de tiempo configurado. El segundo parámetro es el "Número de minutos"; se trata del intervalo de tiempo en el que el monitor busca la repetición de eventos.

Causas

Soluciones

Para comprobar o configurar los valores del límite del grupo de aplicaciones mediante el Administrador de IIS:

Nota: Como este es un monitor de restablecimiento manual, tras arreglar el problema, tendrá que restablecer el estado del monitor en el explorador de estado. Puede hacerlo haciendo clic con el botón derecho en el monitor y seleccionado el elemento de menú "Restablecer estado". A no ser que restablezca el monitor manualmente, no cambiará al estado correcto.

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
Posible pérdida de memoria en el código de la aplicación web
El grupo de aplicaciones {0} en el servidor {1} se reinició varias veces debido a que se excedieron los umbrales de memoria especificados para este grupo de aplicaciones. Esto podría indicar una pérdida de memoria en el código de la aplicación 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>