如何使用WMI监视IIS 7.5应用程序池?

我目前在Server 2008 R2上有一个负载均衡的IIS集群(NLB)应用程序。 此应用程序利用了一些遗留的数据库访问代码,偶尔会导致应用程序池失效。

我想要放置一个WMI事件监视器来监视应用程序池状态的变化(其他build议欢迎),如果进入停止状态,将重新启动应用程序池。

这是暂时的解决方法,直到新的代码可以被推送,但是必须经过Dev / QA / UAT循环。

在根\ webadministration名称空间中有一个用于ApplicationPool的WMI类,但是要获取状态,必须调用该对象上的GetState方法,所以我不确定如何使用WMI事件来观察。

您可以使用内置的事件日志监视function来执行此操作。

如果由于快速失败保护而导致应用程序池closures,则系统事件日志中可能会出现以下事件ID 5002:

“应用程序池”AppPoolName“正被自动禁用,因为服务该应用程序池的进程中存在一系列故障。

为自定义事件日志触发器创build一个计划任务。 手动的XML查询将如下所示:

<QueryList> <Query Id="0" Path="System"> <Select Path="System">*[System[Provider[@Name='Microsoft-Windows-WAS'] and (EventID=5002)]] and *[EventData[Data[@Name='AppPoolID'] and (Data='YourAppPoolFriendlyName')]]</Select> </Query> </QueryList> 

您的计划任务操作可能是运行一个运行appcmd的脚本来重新启动特定的应用程序池。

 appcmd recycle apppool /? Recycle application pool APPCMD recycle APPPOOL <identifier> <-parameter1:value1 ...> Recycles the specified application pool, recycling its the worker processes. The exact application pool identifier must be provided and must resolve to an existing application pool. Supported parameters: identifier (required) Application pool name of the application pool to recycle /apppool.name Application pool name of the application pool to recycle (same as identifier) Examples: appcmd recycle apppool "MyAppPool" Recycle the application pool "MyAppPool". 

如果在同一台服务器上有多个应用程序池,则可能需要优化XML筛选器以指定应用程序池ID。 以下是一个示例事件XML文本:

 - <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> - <System> <Provider Name="Microsoft-Windows-WAS" Guid="{524B5D04-133C-4A62-8362-64E8EDB9CE40}" EventSourceName="WAS" /> <EventID Qualifiers="49152">5002</EventID> <Version>0</Version> <Level>2</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x80000000000000</Keywords> <TimeCreated SystemTime="2012-10-01T19:41:43.000000000Z" /> <EventRecordID>408764</EventRecordID> <Correlation /> <Execution ProcessID="0" ThreadID="0" /> <Channel>System</Channel> <Computer>WEBSERVERNAME.company.com</Computer> <Security /> </System> - <EventData> <Data Name="AppPoolID">YourAppPoolFriendlyName</Data> <Binary /> </EventData> </Event> 

事件日志信息高级过滤:
https://blogs.technet.com/b/askds/archive/2011/09/26/advanced-xml-filtering-in-the-windows-event-viewer.aspx

使用APPCMD来回收应用程序池:
http://technet.microsoft.com/en-us/library/cc770764%28v=ws.10%29.aspx

仅供参考,如果由于快速故障转移保护而失败,则可以禁用该function,而不是tip手</s>脚:

https://stackoverflow.com/a/4802309/448129