Как проверить последнюю переработку пула приложений


Можно ли проверить, когда я переработал пул приложений в последний раз, я хочу проверить дату, когда мой пул приложений был переработан в последний раз, есть ли что-нибудь в IIS, что я могу получить эту информацию.

5 33

5 ответов:

Если включен вход в recycles, вы можете увидеть это в окне просмотра событий.

Если это не так, вы можете использовать счетчики PerfMon, чтобы увидеть Время, затраченное процессом на W3WP.exe, представляющий пул приложений (который будет равен количеству секунд с момента последней переработки)

Вы можете легко найти последнее время рециркуляции с помощью этого фрагмента powershell:

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

Поэтому найдите идентификатор процесса вашего веб-приложения в диспетчере задач.
Сначала добавьте следующие столбцы с помощью Tools > Select columns...: Выберите PID и командную строку.
Посмотрите для любого процесса w3wp.exe-процесс и найдите свое приложение, изучив командную строку (имя пула приложений является ее частью) и запишите его PID.
Затем запустить скрипт PowerShell для найти последнее время рециркуляции:

Надеюсь, это поможет

Чтобы получить всю информацию с помощью одной команды, используйте Get-WmiObject вместо get-process.

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

Это даст вам список всех процессов w3wp на машине и время их запуска. ErrorAction не позволяет командлету выдавать ошибку, если веб-сайты не запущены и, следовательно, не существует процессов w3wp

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime

Протестировано на сервере 2012 R2 с помощью powershell v4. 0

Получить время безотказной работы рабочего процесса (рекомендуется):

$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
    }
}