首页/系统/Linux 运维命令速查/pidstat 按进程细粒度统计
性能与监控48 条

pidstat 按进程细粒度统计

pidstat 是「进程版 sar/iostat」:-u CPU、-r 内存、-d IO、-w 上下文切换、-t 线程级;定位具体进程的维度瓶颈。

Linux 运维命令速查系统更新于 2026-10-13

pidstat 是什么

pidstat 属于 sysstat 套件,把「按进程取数」这件事做得比 top 更规整:它按固定间隔采样并输出区间均值,-u 看 CPU、-r 看内存与缺页、-d 看磁盘 IO、-w 看上下文切换,再加 -t 可以下钻到线程粒度。排查结论要落到「哪个进程、哪个线程、哪个维度」时,它给的是可复现的数字,而不是一闪而过的瞬时值。

基本信息

用途按进程或线程输出 CPU、内存、IO、上下文切换统计
语法pidstat [-u|-r|-d|-w] [-t] [-p PID] [间隔秒] [次数]
所属软件包sysstat(Debian/Ubuntu 与 RHEL 系同名包)
权限说明看其它用户进程的 IO、内存明细通常需要 root;不加 -p 时统计所有活动进程

典型使用场景

  • 定位 CPU 消耗者:top 看到某进程高,用 pidstat -u 观察它的均值与波动
  • 判断是否在等 IO:-d 看读写速率与延迟,配合 iostat 区分是设备慢还是进程狠
  • 内存问题归因:-r 看 RSS 与主缺页速率,主缺页多说明在等磁盘换入
  • 锁竞争排查:-w -t 看线程级非自愿切换,锁争用常表现为 nvcswch 异常高
  • 脚本采样:按固定间隔输出到文件,配合绘图或告警做趋势分析

常用示例

常用示例
pidstat -u 1 5                          # 每 1 秒采一次,共 5 次(不指定 -p 统计全部进程)
pidstat -u -p 1234 1 10                 # 盯住单个进程的 CPU
pidstat -r -p 1234 1 5                  # 内存:VSZ/RSS 与缺页速率
pidstat -d 1 5                          # 磁盘 IO(需内核支持进程级 IO 统计)
pidstat -w -t -p 1234 1 5               # 线程级上下文切换,看锁竞争
pidstat -u -t -p 1234 1 5 | sort -k8 -rn | head   # 按 CPU 占用挑出最热的线程

输出逐列读法

列含义怎么看
%usr / %system用户态与内核态占用比例内核态高说明在频繁系统调用或中断
%CPU该进程(线程)合计占用多线程可超过 100%,是「几核之和」的口径
CPU采样时所在的 CPU 编号持续落在同一核且该核饱和,考虑绑核与中断分布
minflt/s次缺页速率数量大但影响小,多为正常的内存分配
majflt/s主缺页速率非零且持续说明在等磁盘换页,是性能问题的信号
VSZ / RSS虚拟内存与常驻内存大小关注 RSS 的长期趋势而不是单点值
cswch/s自愿上下文切换进程主动让出,通常是等 IO 或锁
nvcswch/s非自愿上下文切换被抢占导致,高意味着 CPU 争抢激烈
-d 的 iodelay 列需要较新的内核才提供,输出里没有这一列并不是命令有问题。若进程级 IO 统计没打开,pidstat -d 会提示不可用,这时改用 iostat 从设备侧观察。
pidstat -p 依赖 PID 在采样期间一直存活。对被监控进程做过重启、蓝绿切换的服务,PID 会变,采样数据会断档,脚本里应先按进程名解析 PID 并处理重启场景。

易错点

  • 把 %CPU 当成整机百分比:它按单核算,多线程进程超过 100% 是正常的,判断是否压满要结合核数
  • 采样间隔设得过短:1 秒以内的间隔噪声大且自身开销上升,排查性能问题用 5 到 10 秒更容易看出趋势
  • 拿 -r 的 RSS 直接和 free 对比:口径不同(页缓存、共享内存的计入方式都不一样),只做同进程内的前后对比
  • 长时间盯着一个 PID 却不确认进程身份:PID 会被复用,尤其是做过重启之后,先核对命令行再下结论

数据来源与参考

  • man 1 pidstat(sysstat)

相关工具

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