2011-12-14 3 views
28

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

+0

Put заявление каротаж в Application_Start в Global.asax, то есть программно. Event Viewr будет хорошим местом для просмотра, если у вас нет доступа к коду. [Эта статья] (http://blogs.msdn.com/b/johan/archive/2008/02/18/monitoring-application-pool- and-application-restarts.aspx) объясняют, как настроить ведение журнала событий перезапуска приложений –

+1

Я спросил [аналогичный вопрос] (http: // stackoverflow.com/questions/5443356/how-to-tell-why-an-iis-application-pool-is-recycled), которые могут быть полезны, если вы находитесь в среде совместного размещения, где вы не можете получить доступ к журналу событий. –

ответ

17

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

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

+2

Где в средстве просмотра событий? Журналы 'Application'? 'Системные' журналы? Где-нибудь еще? – deadlydog

+0

В системных журналах –

34

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

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

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

Надеется, что это помогает

+0

Альтернативой тому, чтобы найти идентификатор процесса, использует snapin IIS и говорит: dir IIS: \ AppPools \ _APPNAME_ \ WorkerProcesses. – nmunson

+2

Не забудьте запустить Powershell в качестве администратора – shadi

+6

Как однострочный: 'ps w3wp | выберите ProcessName, StartTime' на PS v4. –

0

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

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime 

Испытано на Server 2012 R2 с Powershell v4.0

1

Чтобы получить всю информацию с одного использования команды 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)}} 
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' включен.

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 
    } 
} 
Смежные вопросы