簡體   English   中英

Powershell進程CPU檢查

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM