微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

连续监视前X个进程的CPU使用率

我希望能够每5秒钟向最高cpu使用者输出一个日志文件。 这样我就可以在testing中看到谁使用了最多的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

我有两个问题:

有时我会得到:

rubyredmine svn后提交钩极其缓慢

Linux:为进程禁用文件caching?

CreateFileMapping,MapViewOfFile,如何避免阻塞系统内存

Windows应用程序的性能分析。 Visual Studio Profiler更好的select?

在Linux中存储和访问多达1000万个文件

Get-Counter:其中一个性能计数器样本中的数据无效。 查看每个PerformanceCounterSample对象的Status属性,以确保它包含有效的数据。

我想获得完整的stream程名称,而不是

java 25%

idea64 0.8%

...

检测快速用户切换Linux

如何跟踪在特定内核上运行的PID列表?

从RAM驱动器build立真正的产量提高速度?

为什么我的Python应用程序停滞在“系统”/内核cpu时间

在Unix / Linux上用C代码测量一段代码占用的cpu时间

我会尽量用下面的脚本来回答你的两个问题:

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%

按照规定,你有时会得到:

Get-Counter:其中一个性能计数器样本中的数据无效。 查看每个PerformanceCounterSample对象的Status属性,以确保它包含有效的数据。

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

你也希望看到更友好的进程名称。 我不知道使用GetVersionInfo方法是否有更好的方法获取名称比从可执行文件本身。 如果这样的信息是可用的FileDescription属性存储那个值。 如果不可用,则使用不友好的进程名称

你得到这样的输出

Name cpu cpuPercent Description ---- --- ---------- ----------- chrome 10.4988673 8.79 Google Chrome powershell_ise 6.5364419 7.16 Windows PowerShell ISE chrome 38.0174437 4.88 Google Chrome chrome 26.2549683 4.87 Google Chrome chrome 16.9417086 3.16 Google Chrome cavwp 10.2648658 2.67 COModo Internet Security chrome 13.1820845 2.44 Google Chrome chrome 675.016327 2.02 Google Chrome 7.9.7_42331 1037.1570484 1.51 BitTorrent chrome 340.8777851 1.02 Google Chrome

$cpuPercent = @{ Name = 'cpuPercent' Expression = { $TotalSec = (New-TimeSpan -Start $_.StartTime).TotalSeconds [Math]::Round( ($_.cpu * 100 / $TotalSec),2) } } Get-Process -ComputerName $env:computername | Select-Object -Property Name,cpu,$cpuPercent,Description | sort-object -Property cpuPercent -Descending | Select-Object -First 10 |format-table -autosize | out-file c:pro.log

信用度: http : //powershell.com/cs/blogs/tips/archive/2013/04/16/documenting-cpu-load-for-running-processes.aspx

获取进程-ComputerName $ env:computername远程计算机,您可以在csv中

Import-CSV c:"computers.csv" | % { $server = $_.serverName $alivetest = Test-Path "\$serverc$" If ($alivetest -eq "True") {Get-Process -ComputerName $server | Select-Object -Property Name,Description | sort-object -Property cpuPercent -Descending | Select-Object -First 10 |format-table -autosize | out-file c:pro.log} }}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐