【1.1】pidstat

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标;

pidstat 的用法:
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
 
常用的参数:
-u:默认的参数,显示各个进程的cpu使用统计
-r:显示各个进程的内存使用统计
-d:显示各个进程的IO使用情况
-p:指定进程号
-w:显示每个进程的上下文切换情况
-t:显示选择任务的线程的统计信息外的额外信息
-T { TASK | CHILD | ALL }
TASK表示报告独立的task;CHILD关键字表示报告进程下所有线程统计信息;ALL表示报告独立的task和task下面的所有线程;
注意:task和子线程的全局的统计信息和pidstat选项无关;这些统计信息不会对应到当前的统计间隔,
这些统计信息只有在子线程kill或者完成的时候才会被收集;
-V:版本号
-h:在一行上显示了所有活动,这样其他程序可以容易解析
-I:在SMP环境,表示任务的CPU使用率/内核数量
-l:显示命令名和所有参数
 

使用示例

示例一:查看所有进程的 CPU 使用情况( -u -p ALL)

[root@master service]# pidstat -u -p ALL
Linux 3.10.0-693.el7.x86_64 (master)    2026年05月09日  _x86_64_        (1 CPU)

15时19分02秒   UID       PID    %usr %system  %guest    %CPU   CPU  Command
15时19分02秒     0         1    0.00    0.01    0.00    0.01     0  systemd
15时19分02秒     0         2    0.00    0.00    0.00    0.00     0  kthreadd
15时19分02秒     0         3    0.00    0.00    0.00    0.00     0  ksoftirqd/0
15时19分02秒     0         5    0.00    0.00    0.00    0.00     0  kworker/0:0H
15时19分02秒     0         6    0.00    0.00    0.00    0.00     0  kworker/u256:0
15时19分02秒     0         7    0.00    0.00    0.00    0.00     0  migration/0
15时19分02秒     0         8    0.00    0.00    0.00    0.00     0  rcu_bh
15时19分02秒     0         9    0.00    0.00    0.00    0.00     0  rcu_sched
15时19分02秒     0        10    0.00    0.00    0.00    0.00     0  watchdog/0
15时19分02秒     0        12    0.00    0.00    0.00    0.00     0  kdevtmpfs
15时19分02秒     0        13    0.00    0.00    0.00    0.00     0  netns
15时19分02秒     0        14    0.00    0.00    0.00    0.00     0  khungtaskd
15时19分02秒     0        15    0.00    0.00    0.00    0.00     0  writeback
15时19分02秒     0        16    0.00    0.00    0.00    0.00     0  kintegrityd
15时19分02秒     0        17    0.00    0.00    0.00    0.00     0  bioset
15时19分02秒     0        18    0.00    0.00    0.00    0.00     0  kblockd

结果说明
    PID:进程ID
    %usr:进程在用户空间占用cpu的百分比
    %system:进程在内核空间占用cpu的百分比
    %guest:进程在虚拟机占用cpu的百分比
    %CPU:进程占用cpu的百分比
    CPU:处理进程的cpu编号
    Command:当前进程对应的命令
 

示例二: 内存使用情况统计(-r)

[root@master service]# pidstat -r
Linux 3.10.0-693.el7.x86_64 (master)    2026年05月09日  _x86_64_        (1 CPU)

15时21分24秒   UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
15时21分24秒     0         1      1.09      0.00   46236   6776   0.68  systemd
15时21分24秒     0       468      0.18      0.00   34888   3072   0.31  systemd-journal
15时21分24秒     0       485      0.08      0.00  129552   6176   0.62  lvmetad
15时21分24秒     0       494      0.14      0.00   47300   5376   0.54  systemd-udevd
15时21分24秒     0       630      0.01      0.00   55452   1096   0.11  auditd
15时21分24秒    81       654      0.04      0.00   34856   1976   0.20  dbus-daemon
15时21分24秒     0       657      0.09      0.00  219312   5568   0.56  abrtd
15时21分24秒     0       659      0.08      0.00  212308   4036   0.40  rsyslogd
15时21分24秒   998       661      0.02      0.00    8532    804   0.08  lsmd
15时21分24秒     0       662      0.11      0.00  216984   4772   0.48  abrt-watch-log
15时21分24秒     0       663      0.04      0.00  127888   2320   0.23  smartd
15时21分24秒   999       664      0.12      0.00  536212  12048   1.21  polkitd
15时21分24秒     0       674      0.06      0.00   24248   1720   0.17  systemd-logind
15时21分24秒     0       675      0.09      0.00   99608   6080   0.61  VGAuthService
15时21分24秒     0       677      0.69      0.00  305296   6304   0.63  vmtoolsd
15时21分24秒   997       685      0.02      0.00  115640   1776   0.18  chronyd
15时21分24秒     0       692      0.02      0.00   25856    916   0.09  atd
15时21分24秒     0       695      0.07      0.00  126236   1668   0.17  crond
15时21分24秒     0       711      0.08      0.00  123164   3836   0.38  login
15时21分24秒     0       936      0.45      0.00  562412  16580   1.66  tuned
15时21分24秒     0       937      0.07      0.00  105996   4076   0.41  sshd
15时21分24秒    27       976      2.49      0.02 1352960 404828  40.50  mysqld
15时21分24秒     0      1046      0.08      0.00  116052   2684   0.27  bash
15时21分24秒     0      1088      0.09      0.00  147784   5308   0.53  sshd
15时21分24秒  1000      1093      0.02      0.00  147784   2308   0.23  sshd
15时21分24秒  1000      1094      0.09      0.00  116048   2664   0.27  bash
15时21分24秒  1000      1131      0.07      0.00  220584   3824   0.38  su
15时21分24秒     0      1135      0.22      0.00  116164   2908   0.29  bash
15时21分24秒     0      1190      1.30      0.00 3058360  86340   8.64  java
15时21分24秒     0      1710      0.03      0.00  108140   1012   0.10  pidstat

结果说明
    PID:进程标识符
    minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数表明虚拟内存地址映射成物理内存地址产生的
page fault次数,不需要从磁盘中加载页
    majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的    page在swap中,
这样的page fault为major page fault,一般在内存使用紧张时产生,需要从磁盘中加载页
    VSZ:      该进程使用的虚拟内存(以kB为单位)
    RSS:      该进程使用的物理内存(以kB为单位)
    %MEM:     该进程使用内存的百分比
    Command:  拉起进程对应的命令

示例三:显示各个进程的IO使用情况(-d)

[root@master service]# pidstat -d
Linux 3.10.0-693.el7.x86_64 (master)    2026年05月09日  _x86_64_        (1 CPU)

15时23分58秒   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
15时23分58秒     0         1      4.57      0.29      0.08  systemd
15时23分58秒     0         6      0.00      0.00      0.00  kworker/u256:0
15时23分58秒     0        37      0.00      0.00      0.00  kworker/u256:1
15时23分58秒     0       400      0.00      0.00      0.00  xfsaild/dm-0
15时23分58秒     0       468      0.05      0.00      0.00  systemd-journal
15时23分58秒     0       485      0.00      0.00      0.00  lvmetad
15时23分58秒     0       494      0.72      0.00      0.00  systemd-udevd
15时23分58秒     0       630      0.00      0.01      0.00  auditd
15时23分58秒    81       654      0.05      0.00      0.00  dbus-daemon
15时23分58秒     0       657      0.16      0.00      0.00  abrtd
15时23分58秒     0       659      0.05      0.07      0.04  rsyslogd
15时23分58秒   998       661      0.06      0.00      0.00  lsmd
15时23分58秒     0       662      0.06      0.00      0.00  abrt-watch-log
15时23分58秒     0       663      0.09      0.00      0.00  smartd
15时23分58秒   999       664      0.28      0.00      0.00  polkitd
15时23分58秒     0       674      0.03      0.00      0.00  systemd-logind
15时23分58秒     0       675      0.22      0.00      0.00  VGAuthService
15时23分58秒     0       677      0.24      0.00      0.00  vmtoolsd
15时23分58秒   997       685      0.01      0.00      0.00  chronyd
15时23分58秒     0       692      0.00      0.00      0.00  atd
15时23分58秒     0       695      0.07      0.01      0.00  crond
15时23分58秒     0       711      0.08      0.00      0.00  login
15时23分58秒     0       936      0.11      0.00      0.00  tuned
15时23分58秒     0       937      0.08      0.00      0.00  sshd
15时23分58秒    27       976      4.71      0.94      0.00  mysqld
15时23分58秒     0      1046      0.45      0.00      0.00  bash
15时23分58秒     0      1088      0.01      0.00      0.00  sshd
15时23分58秒  1000      1094      0.01      0.00      0.00  bash
15时23分58秒  1000      1131      0.00      0.00      0.00  su
15时23分58秒     0      1135      1.49      0.01      0.00  bash
15时23分58秒     0      1190      3.84      0.42      0.00  java

结果说明
    PID:进程id
    kB_rd/s:每秒从磁盘读取的数据量(KB)
    kB_wr/s:每秒写入磁盘数据量(KB)
    kB_ccwr/s:任务取消写入磁盘的数据量(KB),当任务截断脏的pagecache的时候会发生
    COMMAND:task的命令名
 

示例四:显示每个进程的上下文切换情况(-w)& 针对特定进程统计(-p)

[root@master service]# pidstat -t -p  1190
Linux 3.10.0-693.el7.x86_64 (master)    2026年05月09日  _x86_64_        (1 CPU)

15时25分58秒   UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
15时25分58秒     0      1190         -    0.09    0.14    0.00    0.23     0  java
15时25分58秒     0         -      1190    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1193    0.00    0.01    0.00    0.01     0  |__java
15时25分58秒     0         -      1194    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1195    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1196    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1197    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1198    0.01    0.00    0.00    0.01     0  |__java
15时25分58秒     0         -      1199    0.00    0.00    0.00    0.01     0  |__java
15时25分58秒     0         -      1200    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1203    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1204    0.08    0.06    0.00    0.13     0  |__java
15时25分58秒     0         -      1205    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1206    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1207    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1208    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1209    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1210    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1211    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1212    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1213    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1214    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1215    0.00    0.00    0.00    0.00     0  |__java
15时25分58秒     0         -      1216    0.00    0.00    0.00    0.00     0  |__java

结果说明
    PID:进程id
    Cswch/s:每秒主动任务上下文切换数量,主动任务上下文切换,是指进程无法获取所需资源,导致的上下文切换;
比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换;
    Nvcswch/s:每秒被动任务上下文切换数量,被动任务上下文切换,则是指进程由于时间片已到等原因,
        被系统强制调度,进而发生的上下文切换;
比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换
    Command:命令名
 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐