pidstat -p pid 可查看进程cpu细分数据:%usr为用户态占比,%system为内核态占比,%cpu为二者之和(单核100%基准);需结合采样间隔、线程级分析(-t)、系统调用追踪(strace)及权限控制综合诊断。

直接用 pidstat -p PID 加采样间隔,就能看到指定进程的 CPU 细分数据。关键不是“能不能看”,而是看懂 %usr、%system 和 %CPU 这三列各自代表什么,以及它们之间的关系。
CPU 细分字段含义要分清
%usr 是进程在用户态执行代码所占的 CPU 时间比例,比如业务逻辑计算、字符串处理、算法循环等;%system 是进程陷入内核态所消耗的 CPU,常见于系统调用(如 read()、write()、epoll_wait())、锁等待(futex)、内存分配(mmap)或中断处理;%CPU 是两者之和,即该进程总占用 CPU 的百分比——注意它按单个逻辑核为 100% 基准,4 核满载可能显示接近 400.00。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
快速定位高负载来源的方法
- 若 %usr 明显偏高(比如 >80%,且 %system 很低),说明是应用自身计算密集,应检查代码热点,可用
perf top -p PID或gdb -p PID抓栈 - 若 %system 异常升高(比如 %system 接近 %CPU),大概率存在频繁系统调用或内核路径瓶颈,可配合
strace -p PID -c统计系统调用频次与耗时 - 若 %CPU 波动剧烈但平均值不高,加
-t查线程级分布:pidstat -p PID -t 1,找出个别 TID 占用突兀的线程,再用jstack PID(Java)或cat /proc/PID/stack(通用)看其当前执行位置
避免误读的几个实操细节
- 不带采样间隔(如只输
pidstat -p 1234)会立刻退出,看不到动态数据;必须写明间隔,例如1表示每秒刷新一次 - 进程生命周期短于采样间隔(如 1 秒采样,进程只运行 200ms),pidstat 可能完全捕获不到,或显示为 0.00;对短时进程,可尝试
0.1秒间隔(慎用于长期监控) - 多实例服务别手动
ps aux | grep抄 PID,用pgrep -f 'xxx'自动获取更可靠:pidstat -p "$(pgrep -f 'python api.py')" 1 - 非 root 用户无法监控其他用户进程,查 systemd、dbus 等系统进程需切到 root 权限
组合选项一次看清全貌
想同时观察 CPU 细分 + 所在 CPU 核 + 完整命令行,可合并参数:pidstat -p PID -u -l 1;若还需内存和上下文切换,就扩展为 pidstat -p PID -urw 1。输出中 CPU 列 显示最近调度所在的逻辑核编号,有助于判断是否绑核不合理或存在跨核迁移开销。










