CPU 跑满怎么查
CPU 占用高要按从整体到个体的顺序查:先看总体占用以及用户态与内核态的分布,再锁定具体进程与线程,最后判断是业务高峰还是异常。系统进程与业务进程的占用成因差别很大,先分辨再动手。
基本信息
| 适用平台 | Windows |
|---|---|
| 整体查看 | 任务管理器或性能监视器,观察用户态与内核态占比 |
| 进程定位 | 按 CPU 排序,或两次采样求差得到该时段的真实占用 |
| 系统进程 | 空闲进程数值含义特殊,需正确理解不能当成占用 |
| 辅助手段 | 进程内线程占用、句柄数与 IO 等待情况 |
| 常见非业务成因 | 杀毒扫描、索引、备份与系统更新任务 |
排查步骤
- 1. 看总体占用与用户态、内核态比例,判断瓶颈类型
- 2. 用两次采样对比,锁定这段时间内占用最高的进程
- 3. 系统与空闲进程数值高时,查驱动、杀毒软件与磁盘等待
- 4. 业务进程高时,结合应用日志与线程数分析
- 5. 核对计划任务与备份窗口,排除周期性任务占用
常用示例
常用示例
# 总体 CPU 占用百分比
Get-CimInstance Win32_Processor | Select-Object LoadPercentage
# 按累计 CPU 时间排序,先找出长期占用大户
Get-Process | Sort-Object CPU -Descending | Select-Object -First 8 Name, Id, CPU, Handles
# 两次采样求差,得到这段时间内的真实占用
$a = Get-Process
Start-Sleep -Seconds 10
$b = Get-Process
$b | ForEach-Object { $old = $a | Where-Object Id -eq $_.Id; if ($old) { [pscustomobject]@{Name=$_.Name; Id=$_.Id; Delta=[math]::Round($_.CPU - $old.CPU,1)} } } | Sort-Object Delta -Descending | Select-Object -First 5
# 查看实例数与线程数
Get-Process -Name w3wp | Select-Object Id, CPU, Threads, StartTime观察项与含义
| 观察项 | 含义 | 判断要点 |
|---|---|---|
| 总体占用 | 全部逻辑处理器的平均使用率 | 单核跑满与多核均匀负载要区分 |
| 用户态占比 | 应用程序消耗的部分 | 偏高多为业务逻辑或循环 |
| 内核态占比 | 驱动、中断与 IO 消耗 | 偏高要查驱动、杀毒与磁盘 |
| 进程累计 CPU | 自启动以来的累计处理器秒数 | 需采样求差才是当前占用 |
| 线程数 | 进程内部线程数量 | 异常增长常伴随阻塞或泄漏 |
空闲进程数值高表示系统正在空闲,并不是被占用;系统进程本身占用偏高,则多与驱动、杀毒软件或大量 IO 等待有关,不能直接归因到业务。
持续跑满而业务量没有增长时,优先怀疑死循环、频繁重试或垃圾回收压力。盲目扩容或重启只能短暂缓解,还会掩盖真实原因。