pidstat 概述
pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况。pidstat首次运行时显示自系统启动开始的各项统计信息,之后运行pidstat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。
pidstat 安装
pidstat 是sysstat软件套件的一部分,sysstat包含很多监控linux系统状态的工具,它能够从大多数linux发行版的软件源中获得。
- 在Debian/Ubuntu系统中可以使用下面的命令来安装:
apt-get install sysstat - CentOS/Fedora/RHEL版本的linux中则使用下面的命令:
yum install sysstat
pidstat 示例
pidstat 的用法:
pidstat [ 选项 ] [ <时间间隔> ] [ <次数> ]
如下图:
[root@VM_2_4_centos ~]# pidstat -help Usage: pidstat [ options ] [ <interval> [ <count> ] ] Options are: [ -C <command> ] [ -d ] [ -h ] [ -I ] [ -l ] [ -r ] [ -t ] [ -u ] [ -V ] [ -w ] [ -p { <pid> [,...] | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]
常用的参数:
- -u:默认的参数,显示各个进程的cpu使用统计
- -r:显示各个进程的内存使用统计
- -d:显示各个进程的IO使用情况
- -p:指定进程号
- -w:显示每个进程的上下文切换情况
- -t:显示选择任务的线程的统计信息外的额外信息
- -T { TASK | CHILD | ALL }
这个选项指定了pidstat监控的。TASK表示报告独立的task,CHILD关键字表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。 - -V:版本号
- -h:在一行上显示了所有活动,这样其他程序可以容易解析。
- -I:在SMP环境,表示任务的CPU使用率/内核数量
- -l:显示命令名和所有参数
示例一:查看所有进程的 CPU 使用情况( -u -p ALL)
pidstat
pidstat -u -p ALL
pidstat 和 pidstat -u -p ALL 是等效的。
pidstat 默认显示了所有进程的cpu使用率。
[root@VM_2_4_centos ~]# pidstat Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:29:28 PM PID %usr %system %guest %CPU CPU Command 05:29:28 PM 1 0.00 0.00 0.00 0.00 4 init 05:29:28 PM 3 0.00 0.00 0.00 0.00 0 migration/0 05:29:28 PM 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0 05:29:28 PM 6 0.00 0.00 0.00 0.00 0 watchdog/0 05:29:28 PM 7 0.00 0.00 0.00 0.00 1 migration/1 05:29:28 PM 9 0.00 0.00 0.00 0.00 1 ksoftirqd/1 05:29:28 PM 10 0.00 0.00 0.00 0.00 1 watchdog/1 05:29:28 PM 11 0.00 0.00 0.00 0.00 2 migration/2 05:29:28 PM 13 0.00 0.00 0.00 0.00 2 ksoftirqd/2 05:29:28 PM 14 0.00 0.00 0.00 0.00 2 watchdog/2 05:29:28 PM 15 0.00 0.00 0.00 0.00 3 migration/3 05:29:28 PM 17 0.00 0.00 0.00 0.00 3 ksoftirqd/3 05:29:28 PM 18 0.00 0.00 0.00 0.00 3 watchdog/3 05:29:28 PM 19 0.00 0.00 0.00 0.00 4 migration/4 05:29:28 PM 21 0.00 0.00 0.00 0.00 4 ksoftirqd/4 05:29:28 PM 22 0.00 0.00 0.00 0.00 4 watchdog/4 05:29:28 PM 23 0.00 0.00 0.00 0.00 5 migration/5 05:29:28 PM 25 0.00 0.00 0.00 0.00 5 ksoftirqd/5 05:29:28 PM 26 0.00 0.00 0.00 0.00 5 watchdog/5
详细说明
- PID:进程ID
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
示例二: cpu使用情况统计(-u)
pidstat -u
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
示例三: 内存使用情况统计(-r)
pidstat -r
使用-r选项,pidstat将显示各活动进程的内存使用统计:
[root@VM_2_4_centos ~]# pidstat -r Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:30:53 PM PID minflt/s majflt/s VSZ RSS %MEM Command 05:30:53 PM 1 0.00 0.00 21392 652 0.00 init 05:30:53 PM 526 0.00 0.00 12848 576 0.00 udevd 05:30:53 PM 832 0.00 0.00 6120 88 0.00 agetty 05:30:53 PM 980 0.00 0.00 95244 720 0.00 auditd 05:30:53 PM 996 0.00 0.00 254004 5476 0.02 rsyslogd 05:30:53 PM 1048 0.02 0.00 592936 18728 0.06 YDService 05:30:53 PM 1097 0.00 0.00 23448 240 0.00 dbus-daemon 05:30:53 PM 1126 0.00 0.00 6124 112 0.00 acpid 05:30:53 PM 1236 0.01 0.00 82992 1088 0.00 master 05:30:53 PM 1242 0.00 0.00 102040 4052 0.01 sshd 05:30:53 PM 1251 0.00 0.00 110712 2260 0.01 bash 05:30:53 PM 1254 0.30 0.00 118452 1028 0.00 crond 05:30:53 PM 1263 0.00 0.00 83244 1460 0.00 qmgr 05:30:53 PM 1271 0.00 0.00 23120 216 0.00 atd 05:30:53 PM 1384 0.00 0.00 6108 88 0.00 mingetty 05:30:53 PM 1386 0.00 0.00 6108 96 0.00 mingetty 05:30:53 PM 1388 0.00 0.00 6108 92 0.00 mingetty 05:30:53 PM 1390 0.00 0.00 6108 92 0.00 mingetty 05:30:53 PM 1392 0.00 0.00 6108 2128 0.01 mingetty 05:30:53 PM 1394 0.00 0.00 6108 88 0.00 mingetty 05:30:53 PM 6722 0.00 0.00 149772 7564 0.02 barad_agent 05:30:53 PM 6726 0.14 0.00 152684 9320 0.03 barad_agent
- PID:进程标识符
- Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
- Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
- VSZ:虚拟地址大小,虚拟内存的使用KB
- RSS:常驻集合大小,非交换区五里内存使用KB
- Command:task命令名
示例四:显示各个进程的IO使用情况(-d)
pidstat -d
[root@VM_2_4_centos ~]# pidstat -d Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:31:26 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command 05:31:26 PM 1 1.79 15.40 0.33 init 05:31:26 PM 127 0.00 0.00 0.00 khugepaged 05:31:26 PM 438 0.00 2.11 0.00 kjournald 05:31:26 PM 526 0.00 0.00 0.00 udevd 05:31:26 PM 790 0.00 1.85 0.00 kjournald 05:31:26 PM 832 0.00 0.00 0.00 agetty 05:31:26 PM 980 0.00 0.46 0.00 auditd 05:31:26 PM 996 0.00 0.17 0.00 rsyslogd 05:31:26 PM 1048 0.00 0.00 0.00 YDService 05:31:26 PM 1126 0.00 0.00 0.00 acpid 05:31:26 PM 1236 0.00 0.00 0.00 master 05:31:26 PM 1242 0.00 0.00 0.00 sshd 05:31:26 PM 1251 0.00 0.00 0.00 bash 05:31:26 PM 1254 0.00 0.00 0.00 crond 05:31:26 PM 1263 0.00 0.00 0.00 qmgr 05:31:26 PM 1271 0.00 0.00 0.00 atd 05:31:26 PM 1384 0.00 0.00 0.00 mingetty 05:31:26 PM 1392 0.00 0.00 0.00 mingetty 05:31:26 PM 6722 0.00 0.00 0.00 barad_agent 05:31:26 PM 6726 0.00 0.01 0.00 barad_agent
报告IO统计显示以下信息:
- PID:进程id
- kB_rd/s:每秒从磁盘读取的KB
- kB_wr/s:每秒写入磁盘KB
- kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
- COMMAND:task的命令名
示例五:显示每个进程的上下文切换情况(-w)
[root@VM_2_4_centos ~]# pidstat -w -p 10154 Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:32:37 PM PID cswch/s nvcswch/s Command 05:32:37 PM 10154 0.00 0.00 zabbix_agentd
- PID:进程id
- Cswch/s:每秒主动任务上下文切换数量
- Nvcswch/s:每秒被动任务上下文切换数量
- Command:命令名
示例六:显示选择任务的线程的统计信息外的额外信息 (-t)
[root@VM_2_4_centos ~]# pidstat -t -p 10154 Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:33:21 PM TGID TID %usr %system %guest %CPU CPU Command 05:33:21 PM 10154 - 0.00 0.00 0.00 0.00 2 zabbix_agentd 05:33:21 PM - 10154 0.00 0.00 0.00 0.00 2 |__zabbix_agentd
- TGID:主线程的表示
- TID:线程id
- %usr:进程在用户空间占用cpu的百分比
- %system:进程在内核空间占用cpu的百分比
- %guest:进程在虚拟机占用cpu的百分比
- %CPU:进程占用cpu的百分比
- CPU:处理进程的cpu编号
- Command:当前进程对应的命令
示例七:pidstat -T
pidstat -T TASK
pidstat -T CHILD
pidstat -T ALL
TASK表示报告独立的task。
CHILD关键字表示报告进程下所有线程统计信息。
ALL表示报告独立的task和task下面的所有线程。
注意:task和子线程的全局的统计信息和pidstat选项无关。这些统计信息不会对应到当前的统计间隔,这些统计信息只有在子线程kill或者完成的时候才会被收集。
[root@VM_2_4_centos ~]# pidstat -T ALL -p 10154 Linux 2.6.32-696.6.3.el6.x86_64 (VM_2_4_centos) 06/20/2019 _x86_64_ (8 CPU) 05:34:13 PM PID %usr %system %guest %CPU CPU Command 05:34:13 PM 10154 0.00 0.00 0.00 0.00 2 zabbix_agentd 05:34:13 PM PID usr-ms system-ms guest-ms Command 05:34:13 PM 10154 0 0 0 zabbix_agentd
- PID:进程id
- Usr-ms:任务和子线程在用户级别使用的毫秒数。
- System-ms:任务和子线程在系统级别使用的毫秒数。
- Guest-ms:任务和子线程在虚拟机(running a virtual processor)使用的毫秒数。
- Command:命令名