前回アプリプールをいつリサイクルしたか、アプリプールが最後にリサイクルされた日付を確認したいのですが、IISに情報があります。
リサイクルのログオンがオンになっている場合、イベントビューアー(システムログ)で確認できます。
そうでない場合は、PerfMonカウンターを使用して、アプリケーションプールを表すW3WP.exeのProcess-Elapsed Time(最後のリサイクルからの秒数)を確認できます。
このPowerShellスニペットを使用すると、最新のリサイクル時間を簡単に見つけることができます。
(Get-Process -Id <ProcessId>).StartTime
そのため、タスクマネージャーでWebアプリケーションのプロセスIDを見つけます。
最初にTools> Select columns ...で次の列を追加します...:select[〜#〜] pid [〜#〜] およびコマンドライン。
w3wp.exeプロセスを探し、コマンドライン(アプリケーションプール名はその一部です)を調べてアプリケーションを見つけ、そのPIDを書き留めます。
Powershellスクリプトを実行して、最新のリサイクル時間を見つけます。
お役に立てれば
1つのコマンドですべての情報を取得するには、get-processではなくGet-WmiObjectを使用します。
Get-WmiObject Win32_Process -Filter "name = 'w3wp.exe'" | Select-Object Name, @{"name"="ApplicationPool";expression={(($_).CommandLine).split('"')[1] }},@{"name"="Starttime";expression={$_.ConvertToDateTime($_.CreationDate)}}
これにより、マシン上のすべてのw3wpプロセスとその開始時刻のリストが表示されます。 ErrorActionは、Webサイトが開始されておらず、したがってw3wpプロセスが存在しない場合、コマンドレットがエラーをスローするのを防ぎます
ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime
Powershell v4.0を搭載したServer 2012 R2でテスト済み
Powershellの場合:
(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime
プールがリサイクルされている場合は、何らかの理由でモジュールを再インポートして新しいprocessIdを取得する必要がある場合があります。
$pool = Get-IISAppPool -Name <name>
$pool.recycle()
Import-Module -Force IISAdministration
(ps -id (Get-IISAppPool -Name <name>).WorkerProcesses.ProcessId).StartTime
ワーカープロセスの稼働時間を取得する(推奨):
$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-Eventlog -LogName system -Newest 1 -Source "WAS" -Message "*recycle of all worker processes in application pool '$poolName'*")
Get-Eventlog
を使用できます-After/-Before
引数は、結果をさらに制限します。
最後の 'X'分間にアプリケーションプールがリサイクルされているかどうかを確認するには、次のPowerShellスニペットを使用できます。
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
}
}