Previous Article Next Article Windows 效能監視器 (指令 command line)
Posted in Windows

Windows 效能監視器 (指令 command line)

Windows 效能監視器 (指令 command line) Posted on 2019 年 10 月 07 日Leave a comment

Windows 效能監控工具 Perfmon(Performance Monitor)

Windows 自帶的效能監控工具,有圖有表,可監 CPU、記憶體、網路、磁碟、程序 等等

這裡要講指令建立方式,主要針對 IIS 網站的

至於有那些資源物件可以用呢 ?

秀出可用的計數器

typeperf -q -o PerfMon_Counters_All.txt

或者用 Get-Counter

(Get-Counter -ListSet "*").counter

列出 Web Service 的

(Get-Counter -ListSet "Web Service").counter

建一個檔案 E:\cross\PerfMon_Counters.txt ,內容放需要用的幾個物件

\Processor(*)\% Processor Time
\Processor(*)\% User Time
\Memory\Available MBytes
\Web Service(*)\Bytes Total/sec
\Web Service(*)\Current Connections
\Web Service(*)\Maximum Connections

再來我們就利用 logman 指令直接建立效能監視器

logman create counter perflog_cross -cf E:\cross\PerfMon_Counters.txt -o E:\cross\perflogs -si 60 -cnf 300 -max 200
logman create counter <自訂名稱>
-cf  : 計數器檔
-○   : 將資料存到 E:\cross\perflogs , perflogs 是檔案前置名稱,它會自己叫作 perflogs_000001.blg
-si  : 每 60 秒抽樣一次
-cnf : 持續 300 秒後輪替 (舊檔 perflogs_000002.blg)
-max : 檔案最大上限為 200MB
       一定要有 -cnf 搭配 -max 才會生效,就看那一個先達到就輪替 (或 每五分鐘為一個檔案)

打開控制台 ( perfmon.msc ),就可以看到建立的 perflog_cross 名稱

perfmon 效能監視器

啟動,開始收集資料

logman start perflog_cross

不過你無法馬上檢視到資料 (仍收集中),可以先停掉,再去點擊打開 E:\cross\perflogs_000001.blg
它就會如同打開效能監視器控制台一樣,這時就可在視窗的左上角有 檢視目前的活動(Ctrl+T) ,點它就可以看到即時訊息

logman stop perflog_cross

如果要刪除

logman delete perflog_cross

再者

我們可以用 Get-Counter 也可以立馬看到數據

列出總數 Current Connections

Get-Counter "\Web Service(_total)\Current Connections"

連續輸出

Get-Counter -Continuous

也可加入 -SampleInterval 2 -MaxSamples 100 為每 2 秒一次,持續 100 次

Get-Counter "\Web Service(_total)\Current Connections" -SampleInterval 2 -MaxSamples 100

列出每個站的 Current Connections

Get-Counter "\Web Service(*)\Current Connections"

列出單一站台的 Current Connections

Get-Counter "\Web Service(ssorc.tw)\Current Connections"

只輸出站台與數值,然後 sort and top 10

Get-Counter "\Web Service(*)\Current Connections" | Select-Object -Expand countersamples | Select-Object -Property CookedValue,InstanceName | Sort-Object -Property CookedValue | Select-Object -Last 10

迴圈跑 ( counter.ps1 )

while(1 -eq 1) {
    Write-Output "----------------------------------------------------------------------------------------------------"
    Write-Output "Current Connections"
    Get-Counter "\Web Service(*)\Current Connections" | Select-Object -Expand countersamples | Select-Object -Property CookedValue,InstanceName | Sort-Object -Property CookedValue | Select-Object -Last 10
    Write-Output "Bytes Total/sec"
    Get-Counter "\Web Service(*)\Bytes Total/sec" | Select-Object -Expand countersamples | Select-Object -Property CookedValue,InstanceName | Sort-Object -Property CookedValue | Select-Object -Last 10
    Write-Output "Processor Time"
    Get-Counter "\Processor(_total)\% Processor Time" | Select-Object -Expand countersamples | Select-Object -Property CookedValue,InstanceName
    Write-Output "User Time"
    Get-Counter "\Processor(_total)\% User Time" | Select-Object -Expand countersamples | Select-Object -Property CookedValue,InstanceName
    # sleep 2 # 也不用 sleep 了,上面就跑超過 2 秒了,如果 IIS 站台很多的話
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *