gpt4 book ai didi

windows - 持续监控 Top X 进程的 CPU 使用率百分比

转载 作者:可可西里 更新时间:2023-11-01 13:29:11 25 4
gpt4 key购买 nike

我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件中。这样我就可以看到谁在我的测试期间使用了最多的 CPU。

我发现这个答案很常见:

$cpu = Get-Counter -ComputerName localhost "\Process(*)\% Processor Time" `
| Select-Object -ExpandProperty countersamples `
| where {$_.InstanceName -ne 'idle' } `
| where {$_.InstanceName -ne '_total' }`
| Select-Object -Property instancename, cookedvalue `
| Sort-Object -Property cookedvalue -Descending `
| Select-Object -First 5 `
| ft @{L='Date';E={Get-Date}}, InstanceName, @{L='CPU';E={(($_.Cookedvalue/100)/$NumberOfLogicalProcessors).toString('P')}} -HideTableHeaders `
| Format-Table -Auto | Out-String

我有两个问题:

  1. 有时我得到:

    Get-Counter : The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.

  2. 我想得到完整的进程名称,而不是

    java      25%idea64    0.8%...

最佳答案

我将尝试使用以下脚本一次回答您的两个问题:

Get-Counter "\Process(*)\% Processor Time" -ErrorAction SilentlyContinue `
| select -ExpandProperty CounterSamples `
| where {$_.Status -eq 0 -and $_.instancename -notin "_total", "idle"} `
| sort CookedValue -Descending `
| select TimeStamp,
@{N="Name";E={
$friendlyName = $_.InstanceName
try {
$procId = [System.Diagnostics.Process]::GetProcessesByName($_.InstanceName)[0].Id
$proc = Get-WmiObject -Query "SELECT ProcessId, ExecutablePath FROM Win32_Process WHERE ProcessId=$procId"
$procPath = ($proc | where { $_.ExecutablePath } | select -First 1).ExecutablePath
$friendlyName = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($procPath).FileDescription
} catch { }
$friendlyName
}},
@{N="CPU";E={($_.CookedValue/100/$env:NUMBER_OF_PROCESSORS).ToString("P")}} -First 5 `
| ft -a -HideTableHeaders

结果如下表:

24.07.2016 21:00:53 Microsoft Edge Content Process    9,68%
24.07.2016 21:00:53 system 0,77%
24.07.2016 21:00:53 Microsoft Edge 0,39%
24.07.2016 21:00:53 runtimebroker 0,39%
24.07.2016 21:00:53 Host Process for Windows Services 0,39%
  1. 按照规定,您有时会得到:

Get-Counter : The data in one of the performance counter samples is not valid. View the Status property for each PerformanceCounterSample object to make sure it contains valid data.

这个和windows环境下的进程管理有关。当您执行查询时,一些进程可能会出现,其中一些可能会消失(即负责执行 wmi 查询的 wmiprvse 进程)。某些进程可能需要您拥有的更多权限。这都会导致获取进程信息时出错。可以使用 -ErrorAction SilentlyContinue 开关安全地跳过它,并使用 Status -eq 0 表达式进行过滤。

  1. 您还希望看到更友好的进程名称。我不知道是否有比使用 GetVersionInfo 方法从可执行文件本身获取该名称更好的方法。如果此类信息可用,FileDescription 属性将存储该值。如果它不可用,则使用不友好的进程名称。

关于windows - 持续监控 Top X 进程的 CPU 使用率百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38551504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com