用pidstat -u 1实时监控所有活跃进程CPU占用,%CPU最高者即最耗CPU进程;-t可查线程级热点,pstack/jstack定位栈顶函数;注意采样间隔必填、权限限制及多核百分比含义。

直接用 pidstat -u 1 实时看所有活跃进程的 CPU 占用,重点关注 %CPU 最高的那个 PID,就能快速锁定目标。
查全局高 CPU 进程(不指定 PID)
运行 pidstat -u 1,每秒刷新一次。它默认只显示“有消耗”的活跃进程,输出里 %CPU 列数值最大者就是当前最吃 CPU 的进程。注意区分 %usr(用户态)和 %system(内核态):如果 %system 明显偏高,可能是系统调用频繁或锁竞争导致,不是应用代码问题。
想让结果更稳定,可加 -l 显示完整命令行:
pidstat -u -l 1,避免同名进程混淆(比如多个 python 脚本)。
聚焦监控某个可疑进程
先用 ps aux | grep 关键词 或 pgrep -f '关键词' 找到 PID,再精准盯梢:
pidstat -u -p 1234 1
关键点:
• 必须带采样间隔(如 1),否则命令立即退出,看不到数据;
• 可叠加 -r 同时看内存、-w 看上下文切换,判断是否因频繁切换或缺页拖慢 CPU;
• 若进程生命周期短(比如只活几百毫秒),把间隔缩到 0.1 提高捕获率:pidstat -u -p 1234 0.1。
深入到线程级别定位热点
一个进程可能有多个线程,真正飙 CPU 的只是其中一两个。加 -t 展开线程视图:
pidstat -u -t -p 1234 1
输出中会多出 TID(线程 ID)列。找到 %CPU 最高的那个 TID,记下来;
再用 pstack 1234 或 jstack 1234(Java)看该线程栈,栈顶函数大概率就是问题源头。
对比验证与避坑提醒
• 不要只信 top 的瞬时值:pidstat 的 %CPU 是“本次采样区间内平均值”,更平滑,适合趋势判断;
• 如果 pidstat 显示 %CPU 接近 400.00,说明是 4 核全占满(它按单核 100% 计算);
• 非 root 用户查系统进程(如 systemd)可能权限不足,提示无数据;
• 某些老版本 pidstat 不支持空格分隔多个 PID,用 pgrep 获取列表时建议先测试:pgrep -f 'nginx' | xargs -n1 pidstat -u 1 更稳妥。


















