2011-12-14 41 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 
    } 
} 
相關問題