2011-12-14 29 views
28

là có thể kiểm tra khi tôi tái chế hồ bơi ứng dụng lần trước, tôi muốn kiểm tra ngày khi hồ bơi ứng dụng của tôi được tái chế lần cuối, có bất cứ điều gì trong IIS tôi có thể nhận được thông tin này không.Làm thế nào để kiểm tra hồ bơi ứng dụng cuối cùng được tái chế

+0

Đặt tuyên bố khai thác gỗ trong Application_Start trong Global.asax, đó là chương trình khác. Event Viewr sẽ là một nơi tuyệt vời để xem nếu bạn không có quyền truy cập vào mã. [Bài viết này] (http://blogs.msdn.com/b/johan/archive/2008/02/18/monitoring-application-pool- và-application-restart.aspx) giải thích cách thiết lập ghi lại sự kiện khởi động lại ứng dụng –

+1

Tôi đã hỏi [câu hỏi tương tự] (http: // stackoverflow.com/questions/5443356/how-to-tell-why-an-iis-application-pool-được-tái chế) có thể hữu ích nếu bạn đang ở trong môi trường lưu trữ được chia sẻ nơi bạn không thể truy cập nhật ký sự kiện. –

Trả lời

17

Nếu đăng nhập vào chu kỳ được bật, bạn có thể thấy điều này trong Trình xem sự kiện.

Nếu nó không bạn có thể sử dụng PerfMon quầy để xem Process-thời gian trôi qua trên W3WP.exe đại diện cho hồ bơi ứng dụng của bạn (đó sẽ là số giây kể từ khi tái chế cuối cùng)

+2

Địa điểm trong Trình xem sự kiện? Nhật ký 'Application'? 'Nhật ký hệ thống '? Ở đâu khác? – deadlydog

+0

Trong Nhật ký hệ thống –

34

Bạn có thể dễ dàng tìm thấy mới nhất thời gian tái chế bằng cách sử dụng đoạn mã PowerShell này:

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

Do đó, tìm id quá trình của ứng dụng web trong trình quản lý tác vụ.
Đầu tiên thêm các cột sau qua Tools> Chọn cột ...: chọn PIDCommand Line.
Tìm kiếm bất kỳ quá trình w3wp.exe nào và tìm ứng dụng của bạn bằng cách kiểm tra dòng lệnh (tên nhóm ứng dụng là một phần của nó) và ghi lại PID của nó.
Sau đó chạy các kịch bản PowerShell để tìm ra thời gian tái chế mới nhất:

Hope this helps

+0

Cách khác để tìm ID quá trình đang sử dụng snapin IIS và nói: dir IIS: \ AppPools \ _APPNAME_ \ WorkerProcesses. – nmunson

+2

Đừng quên chạy Powershell với tư cách quản trị viên – shadi

+6

Là một lớp lót: 'ps w3wp | chọn ProcessName, StartTime' trên PS v4. –

0

này sẽ cung cấp cho bạn một danh sách tất cả các quá trình w3wp trên máy tính và thời gian bắt đầu của họ. Các ErrorAction ngăn ngừa sự commandlet từ ném một lỗi nếu không có trang web được bắt đầu và do đó không có quy trình w3wp tồn tại

ps w3wp -ErrorAction SilentlyContinue | select ProcessName, StartTime 

Thử nghiệm trên Server 2012 R2 với PowerShell v4.0

1

Để có được tất cả các thông tin với một sử dụng lệnh Get-WmiObject thay vì nhận được quy trình.

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

Lấy thời gian hoạt động quá trình lao động (Recommended):

$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 

Đối với nó để làm việc, hãy chắc chắn bạn có 'kịch bản quản lý IIS và các công cụ' kích hoạt.

enter image description here

Thứ hai, cách sử dụng bản ghi sự kiện, nếu được kích hoạt

Get-Eventlog -LogName system -Newest 1 -Source "WAS" -Message "*recycle of all worker processes in application pool '$poolName'*") 

Với Get-Eventlog bạn có thể sử dụng -After/-Before lập luận để hạn chế hơn nữa kết quả.

Để kiểm tra xem ứng dụng hồ bơi được tái chế trong vài phút cuối cùng 'X', đoạn PowerShell sau đây có thể được sử dụng:

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 
    } 
} 
Các vấn đề liên quan