执行pidstat,将输出系统启动后所有活动进程的cpu统计信息:
$ pidstat Linux 2.6.32_1-16-0-0_virtio (bjyz) 06/21/2018 _x86_64_ (4 CPU) 04:25:52 PM PID %usr %system %guest %CPU CPU Command 04:25:52 PM 1 0.00 0.00 0.00 0.00 2 init 04:25:52 PM 3 0.00 0.00 0.00 0.00 0 migration/0 04:25:52 PM 4 0.00 0.00 0.00 0.00 0 ksoftirqd/0 04:25:52 PM 6 0.00 0.00 0.00 0.00 0 watchdog/0 04:25:52 PM 7 0.00 0.00 0.00 0.00 1 migration/1 04:25:52 PM 9 0.00 0.00 0.00 0.00 1 ksoftirqd/1 04:25:52 PM 10 0.00 0.00 0.00 0.00 1 watchdog/1
以上输出,除最开头一行显示内核版本、主机名、日期和cpu架构外,主要列含义如下:
11:37:19: pidstat获取信息时间点
PID: 进程pid
%usr: 进程在用户态运行所占cpu时间比率
%system: 进程在内核态运行所占cpu时间比率
%CPU: 进程运行所占cpu时间比率
CPU: 指示进程在哪个核运行
Command: 拉起进程对应的命令
执行pidstat默认输出信息为系统启动后到执行时间点的统计信息,因而即使当前某进程的cpu占用率很高,输出中的值有可能仍为0。
指定采样周期和采样次数
像sar、iostat等命令一样,也可以给pidstat命令指定采样周期和采样次数,命令形式为”pidstat [option] interval [count]”,以下pidstat输出以2秒为采样周期,输出2次cpu使用统计信息:
$ pidstat 1 Linux 2.6.32_1-16-0-0_virtio (bjyz) 06/21/2018 _x86_64_ (4 CPU) 04:27:08 PM PID %usr %system %guest %CPU CPU Command 04:27:09 PM 4044 0.99 0.00 0.00 0.99 1 baas_agent 04:27:09 PM 5692 0.00 0.99 0.00 0.99 3 gianod 04:27:09 PM 6452 0.99 5.94 0.00 6.93 2 minos-agent 04:27:09 PM 6640 1.98 5.94 0.00 7.92 3 minos-agent-tk 04:27:09 PM 9811 0.99 0.00 0.00 0.99 3 webdir-agent 04:27:09 PM 22417 0.00 0.99 0.00 0.99 1 bsdc_agent 04:27:09 PM 25536 0.00 0.99 0.00 0.99 1 ral-agent 04:27:09 PM 25991 0.00 0.99 0.00 0.99 1 pidstat 04:27:09 PM 27879 0.00 0.99 0.00 0.99 0 nginx 04:27:09 PM 30325 0.99 0.99 0.00 1.98 0 naming-agent 04:27:09 PM PID %usr %system %guest %CPU CPU Command 04:27:10 PM 4044 1.00 2.00 0.00 3.00 1 baas_agent 04:27:10 PM 4046 1.00 1.00 0.00 2.00 2 webfoot-agent
若不指定统计次数count,则pidstat将一直输出统计信息。
cpu使用情况统计(-u)
使用-u选项,pidstat将显示各活动进程的cpu使用统计,执行”pidstat -u”与单独执行”pidstat”的效果一样。
内存使用情况统计(-r)
使用-r选项,pidstat将显示各活动进程的内存使用统计:
$ pidstat -r Linux 2.6.32_1-16-0-0_virtio (bjyz) 06/21/2018 _x86_64_ (4 CPU) 04:28:53 PM PID minflt/s majflt/s VSZ RSS %MEM Command 04:28:53 PM 1 0.00 0.00 4828 452 0.01 init 04:28:53 PM 870 0.00 0.00 33896 976 0.02 plymouthd 04:28:53 PM 1802 0.11 0.00 89416 3956 0.10 agent.hosteye 04:28:53 PM 2342 0.00 0.00 3688 320 0.01 udevd 04:28:53 PM 2492 0.01 0.00 197920 123056 3.03 smbd
以上各列输出的含义如下:
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)
使用-d选项,我们可以查看进程IO的统计信息:
$ pidstat -d Linux 2.6.32_1-16-0-0_virtio (bjyz) 06/21/2018 _x86_64_ (4 CPU) 04:29:28 PM PID kB_rd/s kB_wr/s kB_ccwr/s Command 04:29:28 PM 4992 0.00 0.00 0.00 bash 04:29:28 PM 5023 0.00 0.00 0.00 bash 04:29:28 PM 6058 0.01 0.03 0.03 bash 04:29:28 PM 9379 0.00 0.00 0.00 bash
以上主要输出的含义如下:
kB_rd/s: 每秒进程从磁盘读取的数据量(以kB为单位)
kB_wr/s: 每秒进程向磁盘写的数据量(以kB为单位)
Command: 拉起进程对应的命令
针对特定进程统计(-p)
使用-p选项,我们可以查看特定进程的系统资源使用情况:
$ pidstat -p 25541 Linux 2.6.32_1-16-0-0_virtio (bjyz) 06/21/2018 _x86_64_ (4 CPU) 04:30:12 PM PID %usr %system %guest %CPU CPU Command 04:30:12 PM 25541 0.00 0.00 0.00 0.00 0 php-cgi
以上pidstat命令以1秒为采样时间间隔,查看init进程的内存使用情况。
pidstat常用命令
使用pidstat进行问题定位时,以下命令常被用到:
pidstat -u 1
pidstat -r 1
pidstat -d 1
以上命令以1秒为信息采集周期,分别获取cpu、内存和磁盘IO的统计信息。