pidstat -p pid 必须指定采样间隔(如 pidstat -p 1234 1),否则立即退出;需组合 -u(cpu)、-r(内存)、-d(io)参数获取全维度数据,并推荐用 pgrep 动态获取pid,注意 %cpu 为单核占比、%iowait 高且磁盘 util 接近 100% 表示 io 瓶颈。

盯住一个 PID,必须带采样间隔
只输 pidstat -p 1234 会立刻退出,什么也不显示——这是最常犯的错。必须跟上间隔(秒),比如:
- pidstat -p 1234 1:每秒刷新一次
- pidstat -p 1234 5:每 5 秒刷新一次,节奏更稳,适合观察趋势
- 想快速捕捉瞬态峰值,可用 pidstat -p 1234 0.1(注意:太小会导致刷屏、轻微增负)
一次看全 CPU + 内存 + IO,组合参数就行
默认只显示 CPU;要加内存和磁盘 IO,把对应选项拼上:
- -u(CPU,可省略,默认开启)
- -r(内存:RSS、VSZ、缺页次数)
- -d(IO:kB_rd/s、kB_wr/s、%iowait)
例如:pidstat -p 1234 -urd 2 —— 每 2 秒输出该进程的 CPU、内存、IO 全维度数据。
找不到 PID?别手抄,用 pgrep 动态抓
手动 ps aux | grep xxx 容易漏掉多实例、抄错数字、忽略空格。推荐用 pgrep 直接喂给 pidstat:
- pidstat -p "$(pgrep -f 'python server.py')" 1:匹配完整命令行,精准定位脚本进程
- 先试 pgrep -l -f 'python server.py',确认命中的 PID 和名称是否正确
- 如果返回为空,检查大小写、路径空格、或是否用了绝对路径启动
数值怎么看才不误导
%CPU 是单核占比(100% = 占满一个核),不是整机;4 线程跑满 4 核,可能显示 ~400.00;
%iowait 持续 >20% 且磁盘 util 接近 100%,说明进程正被 IO 卡住;
RSS 是实际占用物理内存(KB),VSZ 是虚拟地址空间,别直接比大小。
另外,pidstat 统计的是“本次采样区间内”的平均值,和 top 的实时滚动逻辑不同——它更真实反映该时间段内的负载分布。











