Windows系統性能計數器是操做系統支持用於應用和組件發佈性能數據的特殊對象,而且支持其餘應用獲取和分析這些已發佈的數據。Windows中的性能計數器不少,包括針對磁盤、網絡和TCP等計數器,用戶可以使用這些性能計數器提供的數據肯定程序瓶頸和系統性能。經過運行perfmon.msc啓動性能計數器數據,如圖1所示。用戶能夠經過右擊計數器清單添加其餘計數器,在添加的過程當中顯示如圖2所示的「添加計數器」對話框。網絡
圖1 系統性能計數器ide
圖2 「添加計數器」對話框性能
其中包括性能計數器名,如%Processor Time和Handle Count等,以及計數器對應的範例。當須要獲取處理器相關的性能計數器數據時,默認以處理器命名。若是有多個處理器,則爲計數器分別添加相似於#一、#2和#3這樣的後綴。若是須要處理多個實例,則在添加計數器的過程當中制定相應的實例。網站
5.1 Consuming Counter Data操作系統
PowerShell沒有內置的cmdlet用於獲取性能計數器的值,因此必須使用.NET的類。爲此建立System.Diagnostics.PerformanceCounter的實例,配置其中的屬性並不斷調用NextValue()方法來獲取相應的值。在開始操做性能計數器以前,須要首先配置用戶權限爲管理員權限。而後建立腳本用於監視CPU的使用率,將腳本命名爲「Monitor-CpuUsage.ps1」。將會用性能計數器獲取並顯示當前CPU每秒的佔用率,這個腳本會一直循環執行下去;除非用戶按Ctrl-C終止。其代碼以下:3d
$counter = New-Object Diagnostics.PerformanceCounterrest
$counter.CategoryName = "Processor"orm
$counter.CounterName = "% Processor Time"對象
$counter.InstanceName = "_Total"blog
while ($true)
{
$value = $counter.NextValue()
Write-Host "CPU: $value"
sleep 1
}
其中涉及的計數器名和實例名均可以很容易地從「添加計數器」對話框中找到,Monitor-CpuUsage.ps1腳本的執行結果如圖20所示。
圖3 執行結果
從圖中能夠看到此時的CPU負載並不重,只達到10%左右,用戶能夠用相似的方法獲取其餘性能計數器的數據。
5.2 監視程序
當使用程序時發生不正常的狀況時,一般都會形成佔用大量的系統資源而致使系統重啓。這時使用性能計數器能夠監控程序的運行狀況,即在運行程序的同時啓動監視腳本。該腳本會實時獲取和分析性能數據,當發生異常時會向用戶發出警告。
針對意外終止的應用程序建立一個監視腳本Monitor-Crashes.ps1,腳本將會啓動外部進程。當程序意外退出時,腳本會將重啓5次應用程序以後中止嘗試,其代碼以下:
function Start-Process
{
Write-Host "Starting process..."
.\UnpredictableCrash.exe
}
for ($i = 0; $i -lt 5; $i++)
{
Start-Process
Write-Host "Process exited $($i + 1) times."
}
Write-Host "Program restart limit exceeded."
該腳本的執行結果如圖21所示。
圖4 執行結果
在腳本執行過程當中使用了一個名爲「UnpredictableCrash.exe」的程序,這個程序執行一秒鐘等待操做後並退出。經過這個方法來模擬執行必定的操做,但在特定條件下意外退出的程序。在腳本中只是重啓程序5次。若是須要,則可讓程序一直執行,使其做爲一個駐留程序來執行。
做者: 付海軍
出處:http://fuhj02.blog.51cto.com 版權:本文版權歸做者和51cto共有 轉載:歡迎轉載,爲了保存做者的創做熱情,請按要求【轉載】,謝謝 要求:未經做者贊成,必須保留此段聲明;必須在文章中給出原文鏈接;不然必究法律責任 我的網站: http://txj.lzuer.com/