首页/系统/Windows 运维速查/资源占用定位:CPU Top 排行

资源占用定位:CPU Top 排行

按 CPU 时间排序找出吃 CPU 的进程,并用采样差值区分“正在忙”与“累计高”。

Windows 运维速查系统更新于 2026-10-13

两种口径怎么选

定位 CPU 占用高的进程有两种口径:按累计 CPU 时间排序,找出长期消耗大户;或用两次采样做差值,算出这段时间里真正在忙的进程。累计值高不代表此刻忙,而此刻最忙的进程累计值可能很小,两种口径要配合使用。

差值法为什么更准

Get-Process 的 CPU 属性是进程自启动以来消耗的处理器时间总和,多核机器上还会超过墙钟时间。间隔若干秒取两次快照做差,再除以间隔秒数,就能估算这段时间内占用的核数,比单看累计秒数更贴近用户体感。

基本信息

适用平台Windows 8 / Server 2012 及以后(CPU 属性需较新的 .NET 环境)
语法Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
采样法先取一次快照,等待若干秒后再取一次,对相同 PID 求差
辅助工具Get-Counter 采集处理器时间百分比;任务管理器与性能监视器看实时视图

典型使用场景

  • 服务器变慢时快速找出吃 CPU 的进程
  • 排查应用多开导致的整体占用偏高
  • 发布前后对比 CPU 消耗,评估版本是否引入性能退化
  • 定位计划任务或杀软扫描造成的周期性占用
  • 判断是单进程吃满一核还是多进程均衡占用

常用示例

常用示例
Get-Process | Sort-Object CPU -Descending | Select-Object -First 10 Name, Id, CPU   # 累计 CPU 秒数排行
# 采样差值:算这段时间内实际消耗
$s1 = Get-Process | Select-Object Id, CPU
Start-Sleep 10
$s2 = Get-Process | Select-Object Id, CPU
$s1 | ForEach-Object { $p1 = $_; $p2 = $s2 | Where-Object Id -eq $p1.Id; if ($p2) { [pscustomobject]@{ Id = $p1.Id; Delta = [math]::Round($p2.CPU - $p1.CPU, 1) } } } | Sort-Object Delta -Descending | Select-Object -First 10

指标读法

指标含义判读
CPU(列)进程累计处理器时间(秒)高值说明长期消耗,不代表此刻忙
Delta采样区间内新增 CPU 秒数除以采样秒数即近似占用的核数
处理器时间百分比Get-Counter 采集的整体利用率判断整机是否真的吃紧
多核场景累计秒数可超过墙钟时间需除以逻辑处理器数理解百分比
短命进程快照可能抓不到需持续采样工具才能捕捉
图形化查看用任务管理器或性能监视器;需要脚本化与留档时,采样差值法比人工观察更可靠。
多核机器上累计秒数不能直接换算百分比:差值除以采样秒数得到占用核数,再除以逻辑处理器数才是整体利用率。

易错点

  • CPU 累计秒数对多核机器不直观,需用差值除以采样时间估算占用核数
  • 短命进程抓不到,必须用 perfmon 或 Get-Counter 持续采样
  • 只看累计排行就判定“这个进程有问题”,实际它可能早已空闲
  • 采样间隔过短使差值受抖动影响,结论不可靠

数据来源与参考

  • Microsoft Learn:Get-Process
  • Microsoft Learn:Get-Counter

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌