pidstat命令详解
⼀、命令介绍
pidstat是sysstat⼯具中的⼀个命令,⽤于监控进程的cpu、内存、线程、IO及上下⽂切换等系统资源的占⽤情况。
格式:
pidstat [ options ] [ <interval> [ <count> ] ]
分别是选项时间间隔采集次数
选项含义
-u默认的参数,显⽰各个进程的cpu使⽤统计
-r显⽰各个进程的内存使⽤情况
-d显⽰各个进程的IO使⽤情况
-w显⽰各个进程的上下⽂切换情况
-t显⽰线程
-p指定进程号
-l显⽰命令名和所有参数
-C仅显⽰Command中包含匹配字符串的进程
-G显⽰符合匹配进程名字的进程
⼆、输出信息含义
[root@rver ~]# pidstat
大喜过望的近义词
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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
• %ur:表⽰⽤户进程所使⽤cpu的百分⽐
• %system:表⽰内核进程所使⽤cpu的百分⽐
• %guest:表⽰运⾏vCPU时所消耗的cpu时间百分⽐
• %wait:表⽰任务在等待运⾏时花费的cpu的百分⽐。
• %CPU:表⽰进程所使⽤cpu的百分⽐
• CPU:处理进程的cpu编号
读书卡片• Command:进程对应的命令
注:运⾏pidstat不加任何选项,统计的信息为系统启动开始的各项统计信息
三、实例演⽰
(1)使⽤-r选项统计进程内存使⽤情况
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@rver ~]# pidstat -d 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# stress -i 1
stress: info: [4536] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd
可以清楚看到jbd2和loop2的 I/O延迟和向磁盘写⼊的数据量较之前提⾼了很多 。解释⼀下jbd2是什么,它是⽂件系统的⼀个⽇志功能,是ext4⽂件系统的⽇志功能,如果开启了这个⽇志功能的话,它占⽤的资源,会随着系统IO压⼒的增⼤⽽增多。
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@rver ~]# pidstat -d 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# pidstat -w 2 1
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# pidstat -t -p 28163
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# pidstat -C java
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# pidstat -G java
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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@rver ~]# pidstat -C j
Linux 3.10.0-514.26.2.el7.x86_64 (rver) 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
两个选项作⽤效果基本⼀致。