web-dev-qa-db-ja.com

最後にリサイクルされたアプリプールを確認する方法

前回アプリプールをいつリサイクルしたか、アプリプールが最後にリサイクルされた日付を確認したいのですが、IISに情報があります。

34
Abbas

リサイクルのログオンがオンになっている場合、イベントビューアー(システムログ)で確認できます。

そうでない場合は、PerfMonカウンターを使用して、アプリケーションプールを表すW3WP.exeのProcess-Elapsed Time(最後のリサイクルからの秒数)を確認できます。

22
Stephen S.

このPowerShellスニペットを使用すると、最新のリサイクル時間を簡単に見つけることができます。

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

そのため、タスクマネージャーでWebアプリケーションのプロセスIDを見つけます。
最初にTools> Select columns ...で次の列を追加します...:select[〜#〜] pid [〜#〜] およびコマンドライン
w3wp.exeプロセスを探し、コマンドライン(アプリケーションプール名はその一部です)を調べてアプリケーションを見つけ、そのPIDを書き留めます。
Powershellスクリプトを実行して、最新のリサイクル時間を見つけます。

お役に立てれば

50

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)}}
9
John Kopparhed

これにより、マシン上のすべてのw3wpプロセスとその開始時刻のリストが表示されます。 ErrorActionは、Webサイトが開始されておらず、したがってw3wpプロセスが存在しない場合、コマンドレットがエラーをスローするのを防ぎます

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime

Powershell v4.0を搭載したServer 2012 R2でテスト済み

2
leemicw

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
1
mvanle

ワーカープロセスの稼働時間を取得する(推奨):

$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管理スクリプトとツール」が有効になっていることを確認してください。

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スニペットを使用できます。

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
    }
}
0
sahilsk