linux命令之pidstat

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

使用方法

命令格式

pidstat [ 参数 ] [ <时间间隔> [ <次数> ] ]

参数列表

  • -u 默认的参数,显示各个进程的 CPU 使用统计
  • -r 显示各个进程的内存使用统计
  • -d 显示各个进程的 IO 使用情况
  • -w 显示每个进程的上下文切换情况
  • -p 指定进程号
  • -h 在一行上显示了所有活动

示例

查看 cpu 使用情况

命令:

pidstat 或者 pidstat -u

输出:

05:47:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
05:47:02 PM     0         1    0.01    0.00    0.00    0.01     0  systemd
05:47:02 PM     0         2    0.00    0.00    0.00    0.00     1  kthreadd
05:47:02 PM     0         3    0.00    0.03    0.00    0.03     0  ksoftirqd/0
05:47:02 PM     0         7    0.00    0.12    0.00    0.12     1  rcu_sched
05:47:02 PM     0         9    0.00    0.01    0.00    0.01     0  migration/0
05:47:02 PM     0        10    0.00    0.00    0.00    0.00     0  watchdog/0
05:47:02 PM     0        11    0.00    0.00    0.00    0.00     1  watchdog/1
  • UID 运行进程的用户 ID
  • PID 进程 ID
  • %usr 进程在用户空间占用 CPU 的百分比
  • %system 进程在内核空间占用 CPU 的百分比
  • %guest 进程在虚拟机占用 CPU 的百分比
  • %CPU 进程占用 CPU 的百分比
  • CPU 处理进程的 CPU 编号
  • Command 当前进程对应的命令

查看内存使用情况

命令:

pidstat -r

输出:

05:51:38 PM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
05:51:38 PM     0         1      0.02      0.00   38076    4760   0.03  systemd
05:51:38 PM     0       205      3.21      0.02  126680   63392   0.39  systemd-journal
05:51:38 PM     0       251      1.71      0.00   45536    1696   0.01  systemd-udevd
05:51:38 PM   104       538      0.00      0.00  256396    2028   0.01  rsyslogd
05:51:38 PM     0       544      0.26      0.01 1343920   63936   0.39  kubelet
05:51:38 PM     0       546      0.00      0.00   26044      32   0.00  atd
05:51:38 PM   106       559      0.00      0.00   42904     428   0.00  dbus-daemon
  • minflt/s 任务每秒发生的次要错误,不需要从磁盘中加载页
  • majflt/s 任务每秒发生的主要错误,需要从磁盘中加载页
  • VSZ 虚拟地址大小,虚拟内存的使用 KB
  • RSS 常驻集合大小,非交换区五里内存使用 KB
  • %MEM 进程占内存百分比

查看 IO 使用情况

命令:

pidstat -d

输出:

05:53:20 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
05:53:20 PM     0         1      4.33     28.88      0.02    1384  systemd
05:53:20 PM     0         2      0.00      0.00      0.00      11  kthreadd
05:53:20 PM     0        20      0.00      0.00      0.00       2  writeback
05:53:20 PM     0        34      0.00      0.01      0.00     442  kswapd0
05:53:20 PM     0       162      0.00      3.73      0.00 13168967  jbd2/vda1-8
05:53:20 PM     0       205      1.34      9.66      0.00  137417  systemd-journal
05:53:20 PM     0       251      0.00      0.00      0.00      59  systemd-udevd
  • kB_rd/s 每秒从磁盘读取的KB
  • kB_wr/s 每秒写入磁盘KB
  • kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
  • iodelay 阻塞 IO 延时的时钟数

查看上下文切换情况

命令:

pidstat -w

输出:

05:55:37 PM   UID       PID   cswch/s nvcswch/s  Command
05:55:37 PM     0         1      0.13      0.01  systemd
05:55:37 PM     0         2      0.00      0.00  kthreadd
05:55:37 PM     0         3      9.53      0.00  ksoftirqd/0
05:55:37 PM     0         5      0.00      0.00  kworker/0:0H
05:55:37 PM     0         7    143.27      0.00  rcu_sched
05:55:37 PM     0         8      0.00      0.00  rcu_bh
05:55:37 PM     0         9      2.05      0.00  migration/0
  • cswch/s 每秒主动任务上下文切换数量
  • nvcswch/s 每秒被动任务上下文切换数量

同时查看多种指标

如果你想同时查看 CPU 和内存使用情况,如果你直接使用 pidstat -u -r,这样同一个进程的 CPU 和内存信息会分开显示,如果想让它们显示在一样,你需要添加 -h

命令:

pidstat -u -r -h

输出:

Linux 4.4.0-105-generic (t1-app-002)     06/25/2019     _x86_64_    (2 CPU)

#      Time   UID       PID    %usr %system  %guest    %CPU   CPU  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
 1561456840     0         1    0.01    0.00    0.00    0.01     0      0.02      0.00   38076    4760   0.03  systemd
 1561456840     0         2    0.00    0.00    0.00    0.00     1      0.00      0.00       0       0   0.00  kthreadd
 1561456840     0         3    0.00    0.03    0.00    0.03     0      0.00      0.00       0       0   0.00  ksoftirqd/0
 1561456840     0         7    0.00    0.12    0.00    0.12     0      0.00      0.00       0       0   0.00  rcu_sched
 1561456840     0         9    0.00    0.01    0.00    0.01     0      0.00      0.00       0       0   0.00  migration/0
 1561456840     0        10    0.00    0.00    0.00    0.00     0      0.00      0.00       0       0   0.00  watchdog/0
 1561456840     0        11    0.00    0.00    0.00    0.00     1      0.00      0.00       0       0   0.00  watchdog/1


本作品采用
知识共享署名 4.0 国际许可协议进行许可,转载请注明原文链接


本文链接:https://schhx.github.io/2019/06/25/Linux命令之pidstat/