一、命令介绍

  pidstat是sysstat工具中的一个命令,用于监控进程的cpu、内存、线程、IO及上下文切换等系统资源的占用情况。

格式:
   pidstat [ options ] [ <interval> [ <count> ] ]
     分别是    选项        时间间隔     采集次数
选项 含义
-u 默认的参数,显示各个进程的cpu使用统计
-r 显示各个进程的内存使用情况
-d 显示各个进程的IO使用情况
-w 显示各个进程的上下文切换情况
-t 显示线程
-p 指定进程号
-l 显示命令名和所有参数
-C 仅显示Command中包含匹配字符串的进程
-G 显示符合匹配进程名字的进程

二、输出信息含义

[root@server ~]# pidstat
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/27/2019      _x86_64_        (1 CPU)

04:21:36 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
04:21:36 PM     0         1    0.00    0.00    0.00    0.00    0.00     0  systemd
04:21:36 PM     0         2    0.00    0.00    0.00    0.00    0.00     0  kthreadd
04:21:36 PM     0         3    0.00    0.01    0.00    0.03    0.01     0  ksoftirqd/0
04:21:36 PM     0         7    0.00    0.00    0.00    0.00    0.00     0  migration/0
04:21:36 PM     0         9    0.00    0.01    0.00    0.37    0.01     0  rcu_sched
04:21:36 PM     0        10    0.00    0.00    0.00    0.00    0.00     0  watchdog/0
04:21:36 PM     0        12    0.00    0.00    0.00    0.00    0.00     0  kdevtmpfs
  •  UID:用户id
  •  PID:进程id
  •  %user:表示用户进程所使用cpu的百分比
  •  %system:表示内核进程所使用cpu的百分比
  •  %guest:表示运行vCPU时所消耗的cpu时间百分比
  •  %wait:表示任务在等待运行时花费的cpu的百分比。
  •  %CPU:表示进程所使用cpu的百分比
  •  CPU:处理进程的cpu编号
  •  Command:进程对应的命令

  注:运行pidstat不加任何选项,统计的信息为系统启动开始的各项统计信息

三、实例演示

(1)使用-r选项统计进程内存使用情况

[root@server ~]# pidstat -r 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/27/2019      _x86_64_        (1 CPU)

05:34:31 PM   UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
05:34:33 PM   999     12264      2.97      0.00  342756   55092   2.92  mongod
05:34:33 PM   999     12415     18.32      0.00 1414132  194044  10.30  node
05:34:33 PM     0     27341      0.99      0.00 3264944  534056  28.35  java
05:34:33 PM     0     28616    920.30      0.00  117412    6732   0.36  pidstat

Average:      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
Average:      999     12264      2.97      0.00  342756   55092   2.92  mongod
Average:      999     12415     18.32      0.00 1414132  194044  10.30  node
Average:        0     27341      0.99      0.00 3264944  534056  28.35  java
Average:        0     28616    920.30      0.00  117412    6732   0.36  pidstat
•  minflt/s:从内存中加载数据时每秒出现的次要错误的数目,这些不要求从磁盘载入内存页面
•  majflt/s:从内存中加载数据时每秒出现的主要错误的数目,这些要求从磁盘载入内存页面,一般在内存使用紧张时产生。
•  VSZ:占用的虚拟内存大小,包括进入交换分区的内存
•  RSS:占用的物理内存大小,不包括进入交换分区的内存
•  %MEM:进程使用的物理内存百分比

(2)使用-d选项统计进程IO使用情况

[root@server ~]# pidstat -d 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/27/2019      _x86_64_        (1 CPU)

06:18:11 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
06:18:13 PM   999     12264    979.80      2.02      0.00       0  mongod

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
Average:      999     12264    979.80      2.02      0.00       0  mongod
•  kB_rd/s:进程每秒从磁盘读取的数据量(以kB为单位)
•  kB_wr/s:进程每秒向磁盘写入的数据量(以kB为单位)
•  kB_ccwr/s:任务写入磁盘被取消的速率(以kB为单位)
•  iodelay:任务的I/O阻塞延迟,以时钟周期为单位,包括等待同步块 I/O 和换入块 I/O 结束的时间

例如,我使用stress命令模拟i/o密集情况。

[root@server ~]# stress -i 1
stress: info: [4536] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd

  可以清楚看到jbd2和loop2的 I/O延迟和向磁盘写入的数据量较之前提高了很多 。解释一下jbd2是什么,它是文件系统的一个日志功能,是ext4文件系统的日志功能,如果开启了这个日志功能的话,它占用的资源,会随着系统IO压力的增大而增多。

[root@server ~]# pidstat -d 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

09:29:31 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
09:29:33 AM     0       259      0.00      4.02      0.00       0  jbd2/vda1-8
09:29:33 AM   999     12264      0.00      2.01      0.00       0  mongod
09:29:33 AM   102     27411      0.00     84.42      0.00       0  mysqld

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
Average:        0       259      0.00      4.02      0.00       0  jbd2/vda1-8
Average:      999     12264      0.00      2.01      0.00       0  mongod
Average:      102     27411      0.00     84.42      0.00       0  mysqld
[root@server ~]# pidstat -d 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

09:29:07 AM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
09:29:09 AM     0       259      0.00    133.33      0.00      14  jbd2/vda1-8
09:29:09 AM     0      4465      0.00   1432.84      0.00       7  loop2
09:29:09 AM     0      4537      0.00      0.00      0.00      18  stress
09:29:09 AM   999     12264      0.00      7.96      0.00       0  mongod
09:29:09 AM     0     18768      0.00      1.99      0.00       0  AliYunDun
09:29:09 AM     0     27341      0.00    159.20      0.00       0  java
09:29:09 AM   102     27411      0.00      1.99      0.00       0  mysqld

Average:      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
Average:        0       259      0.00    133.33      0.00      14  jbd2/vda1-8
Average:        0      4465      0.00   1432.84      0.00       7  loop2
Average:        0      4537      0.00      0.00      0.00      18  stress
Average:      999     12264      0.00      7.96      0.00       0  mongod
Average:        0     18768      0.00      1.99      0.00       0  AliYunDun
Average:        0     27341      0.00    159.20      0.00       0  java
Average:      102     27411      0.00      1.99      0.00       0  mysqld

(3)使用-w选项显示进程的上下文切换情况

[root@server ~]# pidstat -w 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

10:31:28 AM   UID       PID   cswch/s nvcswch/s  Command
10:31:30 AM     0         1      0.51      0.00  systemd
10:31:30 AM     0         3      8.63      0.00  ksoftirqd/0
10:31:30 AM     0         9     36.04      0.00  rcu_sched
10:31:30 AM     0       259      7.61      0.00  jbd2/vda1-8
10:31:30 AM    81       445      0.51      0.00  dbus-daemon
10:31:30 AM     0       450      0.51      0.00  systemd-logind
10:31:30 AM     0       869      1.02      0.00  httpd
•  cswch/s :表示每秒自愿上下文切换的次数
•  nvcswch/s :表示每秒非自愿上下文切换的次数

 注:所谓自愿上下文切换,是指进程无法获得所需的资源导致的上下文切换。
     而非自愿上下文切换,则是指进程由于cpu分配的时间片耗尽,被系统强制调度导致的上下文切换

(4)使用-t和-p选项显示指定进程的线程

[root@server ~]# pidstat -t -p 28163
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

11:09:23 AM   UID      TGID       TID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:09:23 AM     0     28163         -    0.01    0.00    0.00    0.00    0.01     0  rancher-catalog
11:09:23 AM     0         -     28163    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28165    0.00    0.00    0.00    0.02    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28166    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28296    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28519    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28801    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     28807    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
11:09:23 AM     0         -     29381    0.00    0.00    0.00    0.00    0.00     0  |__rancher-catalog
  •  TGID:主线程id
  •  TID: 线程id

(5)使用-C和-G选项显示符合匹配的进程

[root@server ~]# pidstat -C java
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

11:31:31 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:31:31 AM     0     27341    0.17    0.05    0.00    0.00    0.22     0  java
[root@server ~]# pidstat -G java
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

11:31:34 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:31:34 AM     0     27341    0.17    0.05    0.00    0.00    0.22     0  java
[root@server ~]# pidstat -C j
Linux 3.10.0-514.26.2.el7.x86_64 (server)       12/28/2019      _x86_64_        (1 CPU)

11:33:03 AM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
11:33:03 AM     0       259    0.00    0.01    0.00    0.04    0.01     0  jbd2/vda1-8
11:33:03 AM     0       327    0.00    0.00    0.00    0.00    0.00     0  systemd-journal
11:33:03 AM     0     27341    0.17    0.05    0.00    0.00    0.22     0  java

两个选项作用效果基本一致。

发表回复

验证码: 5 + 4 =