Potencjalny wyciek pamięci w kodzie aplikacji sieci Web

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

Ten monitor sprawdza zdarzenia rejestrowane po odzyskaniu puli aplikacji z powodu przekroczenia skonfigurowanych progów ilości pamięci i zmienia stan na ostrzegawczy, jeśli pula aplikacji jest odzyskiwana zbyt często (zależnie od konfiguracji monitora). Jest to monitor resetowany ręcznie, co znaczy, że nie zmienia automatycznie stanu na prawidłowy. Aby przełączyć stan monitora na prawidłowy, trzeba go zresetować przy użyciu eksploratora kondycji.

Knowledge Base article:

Podsumowanie

Pula aplikacji jest zbyt często odzyskiwana z powodu osiągnięcia skonfigurowanego limitu wykorzystania pamięci wirtualnej lub fizycznej. Może to oznaczać przeciek pamięci w kodzie wykonywanym w ramach puli aplikacji.

Konfiguracja

Ten monitor sprawdza liczbę zdarzeń odzyskiwania puli aplikacji z powodu osiągnięcia skonfigurowanego progu wykorzystania pamięci (jest on konfigurowany w narzędziach administracyjnych usług IIS). Ten monitor ma dwa parametry, które można skonfigurować. Pierwszy to „Liczba wystąpień” definiująca, ile razy w skonfigurowanym interwale czasu muszą wystąpić zdarzenia sprawdzane przez monitor. Drugi parametr to „Liczba minut”, czyli interwał czasu, w którym monitor szuka wystąpień zdarzeń.

Przyczyny

Rozwiązania

Aby sprawdzić lub skonfigurować ustawienia limitów puli aplikacji przy użyciu Menedżera usług IIS:

Uwaga: Jest to monitor resetowany ręcznie, dlatego po rozwiązaniu problemu należy zresetować stan monitora w eksploratorze kondycji. Można to zrobić przez kliknięcie monitora prawym przyciskiem myszy i wybranie elementu menu „Resetowanie kondycji”. Bez ręcznego zresetowania stan monitora nie zmieni się na prawidłowy.

Element properties:

TargetMicrosoft.Windows.InternetInformationServices.10.0.ApplicationPool
Parent MonitorSystem.Health.AvailabilityState
CategoryAvailabilityHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.Windows.InternetInformationServices.10.0.RepeatedEventLogManualReset2StateMonitorType
RemotableTrue
AccessibilityPublic
Alert Message
Potencjalny wyciek pamięci w kodzie aplikacji sieci Web
Pula aplikacji {0} na serwerze {1} została kilka razy uruchomiona ponownie z powodu przekroczenia określonych dla niej progów ilości pamięci. Może to oznaczać przeciek pamięci w kodzie aplikacji sieci Web.
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.InternetInformationServices.10.0.ApplicationPool.MemoryLeak.Monitor" Accessibility="Public" Enabled="true" Target="Microsoft.Windows.InternetInformationServices.10.0.ApplicationPool" ParentMonitorID="SystemHealth!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Microsoft.Windows.InternetInformationServices.10.0.RepeatedEventLogManualReset2StateMonitorType" ConfirmDelivery="false">
<Category>AvailabilityHealth</Category>
<AlertSettings AlertMessage="Microsoft.Windows.InternetInformationServices.10.0.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>