pidstat 使用说明

pidstat 说明

pidstat 用于监控进程和线程的系统资源使用情况(如CPU、内存、I/O等)。

pidstat 安装

yum -y install sysstat

pidstat 基础用法

pidstat [选项] [<间隔时间> [<统计次数>]] [-e <程序名> <参数>]

常用选项说明

选项 功能
-d 监控进程的 ​I/O 使用情况​(读/写速率)
-H 显示进程的 ​层次结构​(父子进程关系)
-h 水平输出,所有数据在一行显示
-I 在 SMP 系统中,​汇总所有 CPU 的统计值​(默认每 CPU 分开显示)
-l 显示进程的 ​完整命令行​(而不仅是进程名)
-R 监控进程的 ​实时优先级​ 和 ​调度策略
-r 监控进程的 ​内存使用情况​(缺页、内存占用等)
-s 监控进程的 ​栈使用情况
-t 显示与进程关联的 ​线程统计信息
-U [用户名] 监控指定用户的进程(不指定用户名时显示所有用户)
-u 监控进程的 ​CPU 使用率​(默认行为,可省略)
-V 显示 sysstat 包的 ​版本信息
-v 监控进程的 ​内核表使用情况​(如打开文件数、线程数等)
-w 监控进程的 ​上下文切换次数​(自愿/非自愿切换)
-C <命令> 仅监控 ​命令行中包含指定字符串​ 的进程(模糊匹配)(如 -C "python" 会匹配 python3 app.py
-G <进程名> 仅监控 ​进程名中包含指定字符串​ 的进程(模糊匹配)(即 ps -e 中显示的进程名)
-p {PID列表} 监控指定 PID 的进程(支持 SELF 表示当前 shell,ALL 表示所有进程)
-T {TASK} 监控 ​任务级别​ 的统计(默认)
--dec={0/1/2} 控制输出的小数位数(0=无小数,1=保留1位,2=保留2位)
--human 以 ​人类可读格式​ 显示数据(如 KB/MB/GB 代替字节数)

常用场景示例

监控所有进程的 CPU 使用率(默认)

pidstat 2 5      # 每 2 秒采样一次,共采样 5 次
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:22:56 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

05:22:58 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

05:23:00 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
05:23:02 PM     0     18024    0.00    0.50    0.00    0.00    0.50     2  pidstat

05:23:02 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

05:23:04 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0     18024    0.00    0.10    0.00    0.00    0.10     -  pidstat
UID 运行进程的用户ID(如 root 用户为 0)
PID 进程ID
%usr  进程在用户态消耗的 CPU 百分比(应用程序代码执行)
%system 进程在内核态消耗的 CPU 百分比(系统调用、中断处理等)
%guest  进程在虚拟机中消耗的 CPU 百分比(仅虚拟化环境有意义)
%wait 进程等待 CPU 资源的时间占比(高值可能表示 CPU 竞争激烈或 I/O 阻塞)
%CPU  进程总 CPU 使用率(= %usr + %system + %guest)
CPU 进程当前运行的CPU 核心编号(在多核系统中定位负载分布)
Command 进程名称或命令行(若使用 -l 选项显示完整命令)

监控指定进程的内存

pidstat -r -p 1021 1 3   # 监控 PID=1021 内存,每秒 1 次,共 3 次
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:31:47 PM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
05:31:48 PM   992      1021      0.00      0.00 1242092   13768   0.39  vmselect-prod
05:31:49 PM   992      1021      0.00      0.00 1242092   13768   0.39  vmselect-prod
05:31:50 PM   992      1021      0.00      0.00 1242092   13768   0.39  vmselect-prod
Average:      992      1021      0.00      0.00 1242092   13768   0.39  vmselect-prod
minflt/s	每秒次缺页次数(Minor Faults):无需磁盘 I/O,通过空闲物理页或共享页解决。高值可能表示内存分配频繁(如 Java 应用)。
majflt/s	每秒主缺页次数(Major Faults):需从磁盘加载数据到内存,可能引发 I/O 延迟。持续高值表明物理内存不足。
VSZ	虚拟内存大小(Virtual Memory Size,单位 KB):进程申请的虚拟内存总量(包括未使用的预留内存)。
RSS	常驻内存大小(Resident Set Size,单位 KB):进程实际占用的物理内存(不包括交换分区)。
%MEM	物理内存占用百分比:RSS / 总物理内存 * 100。持续增长可能暗示内存泄漏。
分析场景
    内存泄漏:观察 RSS 和 %MEM 是否随时间持续增长。
    频繁缺页:majflt/s > 0 时需检查系统剩余内存(free -h)和交换分区使用(swapon -s)。
    虚拟内存膨胀:高 VSZ 但低 RSS 通常是正常现象(如预分配缓存)。

监控指定进程的 I/O 

pidstat -d -p 1021 1 3   # 监控 PID=1021 内存,每秒 1 次,共 3 次
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:33:59 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
05:34:00 PM   992      1021      0.00      0.00      0.00       0  vmselect-prod
05:34:01 PM   992      1021      0.00      0.00      0.00       0  vmselect-prod
05:34:02 PM   992      1021      0.00      0.00      0.00       0  vmselect-prod
Average:      992      1021      0.00      0.00      0.00       0  vmselect-prod
kB_rd/s	每秒读取数据量(KB):从磁盘读取的数据量。高值可能表示大量文件读取操作(如数据库查询)。
kB_wr/s	每秒写入数据量(KB):向磁盘写入的数据量。高值可能表示日志写入或数据持久化操作(如 Redis AOF)。
kB_ccwr/s	每秒取消的写入数据量(KB):因 I/O 合并或缓存策略取消的写入量。通常关注 kB_wr/s 即可。
iodelay	I/O 延迟(毫秒):进程因等待 I/O 完成而阻塞的时间。高值表明磁盘性能瓶颈(如机械硬盘过载或 SSD 排队)。
分析场景
    磁盘瓶颈:若 kB_rd/s 或 kB_wr/s 接近磁盘最大吞吐量(通过 iostat -dx 查看 MB/s),需升级磁盘或优化 I/O 模式。
    高延迟问题:iodelay > 100ms(机械硬盘)或 iodelay > 20ms(SSD)时,检查磁盘利用率(iostat -x 1 的 %util 列)。
    写入放大:kB_ccwr/s 显著高于 kB_wr/s 可能表示文件系统或应用层写入优化不足。

监控某用户的线程级 CPU 使用

pidstat -t -u -U root 1    # 监控 root 用户的所有线程,每秒 1 次
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:39:07 PM     USER      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
05:39:08 PM     root     18132         -    0.98    0.00    0.00    0.00    0.98     0  pidstat
05:39:08 PM     root         -     18132    0.98    0.98    0.00    0.00    1.96     0  |__pidstat

Average:        USER      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        root     18132         -    0.98    0.00    0.00    0.00    0.98     -  pidstat
Average:        root         -     18132    0.98    0.98    0.00    0.00    1.96     -  |__pidstat

按命令名过滤进程​

pidstat -C vmselect-prod -l 2      # 显示完整命令行,每 2 秒采样一次
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:40:54 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command

05:40:56 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
05:40:58 PM     0     18225    0.00    0.50    0.00    0.00    0.50     3  pidstat -C vmselect-p*** -l 2 2 

Average:      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
Average:        0     18225    0.00    0.25    0.00    0.00    0.25     -  pidstat -C vmselect-p*** -l 2 2 

以人类可读格式输出内存使用

pidstat -r --human 1       # 每秒显示内存使用(如 MB/GB)
Linux 4.19.90-2102.2.0.0062.ctl2.x86_64 (localhost.localdomain) 	04/23/2025 	_x86_64_	(4 CPU)

05:42:11 PM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
05:42:12 PM     0     18235    996.04      0.00  213.4M    5.5M   0.2%  pidstat

Average:      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
Average:        0     18235    996.04      0.00  213.4M    5.5M   0.2%  pidstat
posted @ 2025-05-06 17:48  小吉猫  阅读(141)  评论(0)    收藏  举报