2011-12-14 119 views
28

是否有可能检查我上次回收应用程序池的时间,我想检查应用程序池上次回收的日期,有没有什么在IIS中可以获取此信息。如何检查应用程序池最后回收

+0

认沽logging语句在Global.asax中,这是编程。如果您无法访问代码,Event Viewr将是您查看的好地方。[本文](http://blogs.msdn.com/b/johan/archive/2008/02/18/monitoring-application-pool- and-application-restarts.aspx)解释如何设置应用程序重新启动事件日志记录 – 2011-12-14 20:47:38

+1

我问了一个[类似的问题](http:// stackoverflow。com/questions/5443356/how-to-tell-why-an-iis-application-pool-is-recycled),如果您处于无法访问事件日志的共享主机环境中,这可能很有用。 – 2012-08-07 10:36:24

回答

17

如果登录回收站已打开,您可以在事件查看器中看到这一点。

如果它不是你可以使用性能计数器,看看过程,经过时间的W3WP.EXE代表您的应用程序池(这将是自上个循环的秒数)

+2

在事件查看器中的何处? '应用程序'日志? `系统`日志?别的地方? – deadlydog 2017-01-26 22:35:58

34

你可以很容易地找到最新通过使用这个PowerShell的代码片段回收时间:

(Get-Process -Id <ProcessId>).StartTime 

因此找到您的web应用程序的进程id在任务管理器。
首先通过工具>选择列添加以下列...:选择PID命令行。
查找任何w3wp.exe进程,并通过检查命令行(应用程序池名称是其一部分)并记下其PID,找到您的应用程序。
然后运行PowerShell脚本找到最新的回电时间:

希望这有助于

0

这会给你的机器上所有的w3wp进程和其开始时间的列表。该ErrorAction防止抛出一个错误的命令行,如果没有网站被启动,因此没有W3WP过程中存在

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime 

测试服务器2012 R2使用PowerShell V4.0

1

,用一个命令使用得到的所有信息Get-WmiObject而不是get-process。启用

$poolName = <your pool name goes here eg. DefaultPool> 
$poolProcess =(gwmi -NS 'root\WebAdministration' -class 'WorkerProcess' | select AppPoolName,ProcessId | Where-Object { $_.AppPoolName -eq $poolName }) 

$lastStartTime=(Get-Process -Id $poolProcess.ProcessId).StartTime 
write-output $lastStartTime 

对于它的工作,请确保您有 'IIS管理脚本和工具':

Get-WmiObject Win32_Process -Filter "name = 'w3wp.exe'" | Select-Object Name, @{"name"="ApplicationPool";expression={(($_).CommandLine).split('"')[1] }},@{"name"="Starttime";expression={$_.ConvertToDateTime($_.CreationDate)}} 
0

获取工作进程的正常运行时间(推荐)。

enter image description here

其次,方法是使用事件日志,如果启用

Get-Eventlog -LogName system -Newest 1 -Source "WAS" -Message "*recycle of all worker processes in application pool '$poolName'*") 

随着Get-Eventlog,您可以使用-After/-Before参数来进一步限制的结果。

要检查应用程序池在最后的“X”分钟循环,下面的PowerShell片断可以:在的Application_Start

function isRecycledInLastNMinutes($appPoolName, $lminutes){ 
    $beforeDate = Get-Date -format 'u' 
    $afterDate = $beforeDate.addMinutes(-$lminutes) 
    $result = (Get-Eventlog -LogName system -Newest 1 -Source "WAS" -After $afterDate -Before $beforeDate -Message "*recycle of all worker processes in application pool '$appPoolName'*") 
    if($result.length -eq 1){ 
     return $true 
    }else{ 
     retrun $false 
    } 
} 
相关问题