[英]Powershell Process CPU checking
具有以下內容可以正常運行,但在PowerShell中存在問題:
$FileName = "E:\Work\ps\Inventory.htm"
$serverlist = "E:\Work\ps\Monitored_computers.txt"
foreach ($server in Get-Content $serverlist)
{
$servern=$server.split(",")[0]
$ip=$server.split(",")[1]
$cpu = gwmi Win32_PerfFormattedData_PerfProc_Process -Computer $servern -filter "Name <> '_Total' and Name <> 'Idle'" | Sort-Object PercentProcessorTime -Descending | where { $_.PercentProcessorTime -gt 0 }| select -First 1
if ($cpu.PercentProcessorTime -ge "92") {
write-host $servern ' ' $cpu.Name ' ' $cpu.PercentProcessorTime
}
}
我在PowerShell中看到了其他一些代碼,該代碼采用“平均值”,但幾乎看起來像“平均值的平均值”,這毫無意義。 而且,這是用於總體CPU使用率
gwmi win32_processor | Measure-Object -property LoadPercentage -Average | Foreach {$_.Average}
現在,如果我們可以采用相同的邏輯並申請我們的流程問題:
gwmi Win32_PerfFormattedData_PerfProc_Process | Sort-Object PercentProcessorTime -Descending | where { $_.PercentProcessorTime -gt 0 } | select -First 1 | Measure-Object -property PercentProcessorTime -Average | Foreach {$_.PercentProcessorTime}
我想問的是:我確實獲得了CPU百分比,這似乎是一個“時間點”。 如何找到真正的CPU百分比? 這就是為什么我指出了平均值。 我真的很想解決這個“時間點”部分。
關鍵是,當我們多次看到服務器上每個進程的CPU數量都很高時,我們登錄到服務器,而CPU數量已經減少。 這並不是說每次都這樣,但是我們知道有時候CPU會峰值然后安靜下來。
感謝您的見解!
第一個問題是,您被困在某個時間點上,因為執行腳本時,它會捕獲當時和那里發生的事情的快照。 您正在尋找的是歷史數據,因此您可以找出一定時間段內進程的平均CPU使用率,並查明阻塞CPU的進程。 您是否有性能監控器來跟蹤單個進程的CPU使用率? 如果想在事后獲得所需的數字,則可能需要設置性能日志記錄。
其次,我認為您會誤解Measure-Object
工作原理。 如果在cmdlet上運行Get-Help
並檢查Output,您將看到它輸出GenericMeasureInfo
對象。 該對象將具有您要查找的相關統計信息的屬性,在您的情況下為Average屬性。 它不是平均值的平均值,我看到的最常見用法是計算一些東西(例如Sum或Average),然后輸出該屬性的值。
讓我們嘗試一個簡單的例子...
查找文件夾中文件的平均大小。 首先,我們使用Get-ChildItem
獲取文件集合,並將其通過管道傳遞到Measure-Object
。 我們將指定-Average
參數以指定要計算平均值,以及-Property length
,以便它知道要求平均值:
GCI C:\Temp\* -file | Measure-Object -Average -Property length
這將輸出一個GenericMeasureInfo
對象,如下所示:
Count : 30
Average : 55453155
Sum :
Maximum :
Minimum :
Property : Length
那讓我知道它有30個文件通過管道傳輸,並且它找到了Length屬性的Average。 現在,有時你要計算多件事情,所以你可以使用多個參數,如-Sum
和-Maximum
,這些值將被填充,以及:
Count : 30
Average : 55453155
Sum : 1663594650
Maximum : 965376000
Minimum :
Property : Length
因此,看起來我的平均文件大小約為55MB,但是在整個文件夾的1.6GB中,我只有一個文件965MB! 毫無疑問,那個文件歪曲了我的電話號碼。 通過該輸出,我可以找到包含多個文件的文件夾,但是一個文件占用了該文件夾一半以上的空間,並發現了異常……例如我已經保存到我的C:\\ temp文件夾中的ISO原因。 看起來我需要做一些文件維護。
感謝@TheMadTechnician,我得以解決此問題。 我的組件有誤
$ _。平均
我在哪里
$ _。PercentProcessorTime
那永遠都行不通。 這是正確的腳本:
$serverlist = "D:\Work\ps\Monitored_computers.txt"
foreach ($server in Get-Content $serverlist) {
$servern=$server.split(",")[0]
$ip=$server.split(",")[1]
$cpu = gwmi Win32_PerfFormattedData_PerfProc_Process -Computer $ip | `
Where-Object {$_.Name -like "*tomcat*"} | `
Measure-Object -property PercentProcessorTime -Average | `
Foreach {$_.Average}
if ($cpu -ge "20") {
write-host $servern $cpu ' has a tomcat process greater than 20'
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.