柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

linux性能检测之pidstat详解

Sysstat是一个工具集,包括sar、pidstat、iostat、mpstat、sadf、sadc。 这里记录一下pidstat这个命令。

一、介绍

1.1 简介

      pidstat代表PID统计,它是sysstat工具集中的一个工具。这个工具可以监控内核管理的单独进程并生成报表。他可以监控指定的PID(Porcess ID)也可以监控系统中所有运行中的简称。

      这个工具可以提供进程的各类统计信息包括:进程的CPU使用情况、磁盘使用情况,还可以统计特定任务和子进程相关的信息。


1.2  格式

pidstat  [ -C comm ] [ -d ] [ -h ] [ -I ] [ -l ] [ -p { pid [,...] | SELF | ALL } ] [ -r ] [ -t ] [ -T { TASK |CHILD | ALL } ] [ -u ] [ -V ] [ -w ] [ interval [ count ] ]


1.3 选项:

-C comm:仅显示其命令名称包含字符串comm的任务。

-d:报告I / O统计信息。将显示以下值:

-h:在单行上水平显示所有活动。

-I:在SMP环境中,指示任务CPU使用情况(由选项-u显示)应除以总处理器数。

-l:显示进程命令名称及其所有参数。

-p { pid [,...] | SELF | ALL }:选择要报告统计信息的任务(进程)。 pid是进程标识数。 SELF关键字表示要为pidstat进程本身报告统计信息,而ALL关键字表示统计信息将被管理的所有任务报告系统。

-r:报告页面故障和内存利用率。

-t : 还显示与所选任务相关联的线程的统计信息。

-T { TASK | CHILD | ALL }: 此选项指定必须由pidstat命令监视的内容。 TASK关键字表示要为个别任务报告统计数据(这是默认选项),而CHILD键 - 字表示统计将被全面报告给所选择的任务,dren。 ALL关键字表示要针对个别任务和全球报告统计信息

所选择的任务和他们的子进程。注意:任务及其所有子项的全局统计信息不适用于pidstat的所有选项。此外,这些统计信息与当前时间间隔不一定相关:子进程的统计信息过程仅在其完成或被杀死时被收集。

-V:打印版本号,然后退出。

-u:报告CPU利用率。

-w : 报告任务切换活动.


博文来自:www.51niux.com

二、示例

2.1 打印活动进程任务

#pidstat   #跟pidstat -u和pidstat -h 一样,不过-u会显示UID,pidstat -h 不过-h除了显示UID以外前面的时间是时间戳的形式。跟pidstat -T TASK 是完全一样的。

Linux 2.6.32-358.el6.x86_64 (localhost.localdomain)      2017年03月22日  _x86_64_        (12 CPU)


14时07分52秒       PID    %usr %system  %guest    %CPU   CPU  Command

14时07分52秒         1    0.00    0.00    0.00    0.00     8  init

14时07分52秒         2    0.00    0.00    0.00    0.00     1  kthreadd

14时07分52秒         3    0.00    0.00    0.00    0.00     0  migration/0

14时07分52秒         4    0.00    0.00    0.00    0.00     0  ksoftirqd/0

14时07分52秒         6    0.00    0.00    0.00    0.00     0  watchdog/0

14时07分52秒         7    0.00    0.00    0.00    0.00     1  migration/1

14时07分52秒         9    0.00    0.00    0.00    0.00     1  ksoftirqd/1

14时07分52秒        10    0.00    0.00    0.00    0.00     1  watchdog/1

#PID:被监控任务的进程号。

#%usr : 在用户级别(应用程序)执行任务时使用的CPU的百分比,和 nice 优先级无关,此字段不包括运行虚拟处理器的时间。

#%system : 在系统级别(内核)执行任务时CPU使用的百分比。

#%guest : 虚拟机中任务占用的CPU的百分比(运行虚拟处理器)。

#%CPU :该任务使用的CPU时间的总百分比。 在SMP环境中,任务的CPU使用率将会达到如果在命令行中输入了选项-I,则除以CPU的总数。

#CPU :  正在运行这个任务的CPU的编号。

#Command: 这个任务的命令名称。


2.2 打印某个命令的任务进程

# pidstat -C qemu-kvm  #这是一台kvm的宿主机,可以看到qemu-kvm命令是通过UID是107的用户,PID进程可以看出来,cpu使用率以及所运行的CPU编号都可以看出来。

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


14:26:04      UID       PID    %usr %system  %guest    %CPU   CPU  Command

14:26:04      107      1974    0.08    0.27    0.14          0.50        0        qemu-kvm

14:26:04      107      1993    0.04    0.12    0.14           0.30      1         qemu-kvm

14:26:04      107      2004    0.66    0.55    0.44          1.65       3         qemu-kvm

14:26:04      107      2017    8.25    1.13    0.51          9.89       0         qemu-kvm

14:26:04      107      2041    0.95    0.57    0.29          1.81       4          qemu-kvm

# id qemu  #qemu用户的UID是107

uid=107(qemu) gid=107(qemu) groups=107(qemu),36(kvm)

#注:默认pidstat只能将活动的进程所对应的命令打印出来,所以有些非活动的进程用pidstat -C查看不了,得用pidstat -p 进程id号来查看。

博文来自:www.51niux.com

2.3 显示每个进程的I/O情况

#pidstat -d  #这是一台nginx-cache服务器

Linux 2.6.32-358.el6.x86_64 (localhost.localdomain)      2017年03月22日  _x86_64_        (12 CPU)


14时31分43秒       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

14时31分43秒         1   1681.40   3147.24     71.33  init

14时31分43秒       138      0.00      0.05      0.00  kswapd0

14时31分43秒       140      0.00      0.58      0.00  khugepaged

14时31分43秒       591      0.00      8.76      0.00  jbd2/dm-1-8

14时31分43秒     30848      0.28      0.69      0.01  nginx


#PID:被监控任务的进程号。

#kB_rd/s:任务导致从磁盘每秒读取的千字节数。

# kB_wr/s:任务造成的千字节数,或者每秒要写入磁盘(单位kb/s)。

#kB_ccwr/s:写入磁盘已被任务取消的千字节数。 这可能发生在任务会截断一些脏页面缓冲。 在这种情况下,另一个任务已被考虑的一些IO因为不会发生。

#Command:这个任务的命令名称。


2.4 显示完整的命令路径

# pidstat  -l  #-l选项可以让其输出完整的命令路径

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


14:43:39      UID       PID    %usr %system  %guest    %CPU   CPU  Command

14:43:39        0         1    0.00    0.02    0.00    0.02     5  /usr/lib/systemd/systemd --switched-root --system --deserialize 21 


2.5 显示某一个PID的磁盘读写和CPU使用情况

# pidstat -p 2041 -d 1 2  #记住这个格式-p 加PID号,但是后面一定要加上刷新频率和刷新几次。我这里是1秒刷新一次,一共刷新两次。不然输出不了想要的结果。

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


14:47:02      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

14:47:03      107      2041      0.00      0.00      0.00  qemu-kvm

14:47:04      107      2041      0.00      0.00      0.00  qemu-kvm

Average:      107      2041      0.00      0.00      0.00  qemu-kvm

# pidstat -p 2041 1 2

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


14:47:13      UID       PID    %usr %system  %guest    %CPU   CPU  Command

14:47:14      107      2041    2.00    0.00    0.00    2.00     5  qemu-kvm

14:47:15      107      2041    1.00    0.00    0.00    1.00     5  qemu-kvm

Average:      107      2041    1.50    0.00    0.00    1.50     -  qemu-kvm


# pidstat -p ALL  #就是将活动与不活动的进程都打印出来


博文来自:www.51niux.com

2.6 显示进程的分页错误和内存使用率

# pidstat -r    

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


14:51:08      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command

14:51:08        0         1      1.97      0.01   46840   7380   0.05  systemd

14:51:08        0       585      0.58      0.00   37980   5720   0.03  systemd-journal

14:51:08        0       620      0.13      0.00  195124   6212   0.04  lvmetad

14:51:08        0       627      0.30      0.00   47708   5860   0.04  systemd-udevd

14:51:08        0       843      0.06      0.00   55416   1720   0.01  auditd

14:51:08        0       847      0.03      0.00   84492    876   0.01  audispd

#UID:执行此进程的用户UID号。

#PID: 执行此进程的PID号。

#minflt/s: 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。

#majflt/s: 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。

#VSZ :  虚拟大小:整个任务的虚拟内存使用量,单位为千字节。

#RSS :  驻留设置大小,长期内存使用:任务中使用的非交换物理内存(以千字节为单位)。 

#%MEM: 内存使用百分比。

#Command:  进程执行的命令。


2.7 树形结构显示某一个命令的统计信息。

# pidstat -t -C "qemu-kvm" #将命令qemu-kvm的进程以及子线程都显示出来

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:02:06      UID      TGID       TID    %usr %system  %guest    %CPU   CPU  Command

15:02:06      107      1974         -    0.08    0.26    0.13    0.48     3  qemu-kvm

15:02:06      107         -      1974    0.04    0.12    0.00    0.16     3  |__qemu-kvm

15:02:06      107         -      1978    0.03    0.13    0.10    0.26     9  |__qemu-kvm

15:02:06      107         -      1979    0.01    0.02    0.03    0.05     5  |__qemu-kvm

15:02:06      107      1993         -    0.03    0.11    0.13    0.28     0  qemu-kvm

15:02:06      107         -      1993    0.01    0.02    0.00    0.03     0  |__qemu-kvm

15:02:06      107         -      1997    0.02    0.08    0.10    0.19     7  |__qemu-kvm

15:02:06      107         -      1998    0.01    0.01    0.03    0.06     5  |__qemu-kvm

15:02:06      107      2004         -    0.66    0.54    0.42    1.62     1  qemu-kvm

15:02:06      107         -      2004    0.27    0.41    0.00    0.69     1  |__qemu-kvm

15:02:06      107         -      2008    0.02    0.11    0.18    0.32     6  |__qemu-kvm

15:02:06      107         -      2009    0.00    0.01    0.03    0.05     5  |__qemu-kvm

15:02:06      107         -      2010    0.01    0.06    0.05    0.13     0  |__qemu-kvm

15:02:06      107         -      2011    0.02    0.04    0.16    0.22    10  |__qemu-kvm

15:02:06      107         -      2012    0.07    0.14    0.00    0.22     2  |__qemu-kvm

15:02:06      107      2017         -    8.25    1.10    0.47    9.83     4  qemu-kvm

15:02:06      107         -      2017    7.79    0.12    0.00    7.91     4  |__qemu-kvm

15:02:06      107         -      2021    0.27    0.84    0.31    1.42     2  |__qemu-kvm

15:02:06      107         -      2022    0.07    0.26    0.16    0.49     5  |__qemu-kvm

15:02:06      107      2041         -    0.95    0.57    0.27    1.79     5  qemu-kvm

15:02:06      107         -      2041    0.45    0.69    0.00    1.14     5  |__qemu-kvm

15:02:06      107         -      2052    0.02    0.10    0.14    0.26     5  |__qemu-kvm

15:02:06      107         -      2053    0.01    0.03    0.13    0.17     9  |__qemu-kvm

15:02:06      107         -      2054    0.09    0.12    0.00    0.21     2  |__qemu-kvm

#UID:执行此命令的用户UID。

#TGID:线程组长的识别号。

#TID:正在监视的线程的标识号。

#%usr : 在用户级别(应用程序)执行任务时使用的CPU的百分比,和 nice 优先级无关,此字段不包括运行虚拟处理器的时间。

#%system : 在系统级别(内核)执行任务时CPU使用的百分比。

#%guest : 虚拟机中任务占用的CPU的百分比(运行虚拟处理器)。

#%CPU :该任务使用的CPU时间的总百分比。 

#CPU :  正在运行这个任务的CPU的编号。

#Command: 这个任务的命令名称。


2.8 -T { TASK | CHILD | ALL }说明

# pidstat -T TASK -C "qemu-kvm"   #就相当于#pidstat -C "qemu-kvm" ,默认就是-T TASK

# pidstat -T CHILD -C "qemu-kvm"

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:09:57      UID       PID    usr-ms system-ms  guest-ms  Command

15:09:57      107      1974     10930     35170     17320  qemu-kvm

15:09:57      107      1993      4350     15070     17110  qemu-kvm

15:09:57      107      2004     88490     72400     56520  qemu-kvm

15:09:57      107      2017   1107470    146920     62860  qemu-kvm

15:09:57      107      2041    127340     75740     36480  qemu-kvm

#usr-ms:该任务及其所有子项在用户执行时花费的毫秒数级别(应用程序),有或没有优先级,并在时间间隔内收集。 请注意,此字段不包括运行虚拟处理器的时间。

#system-ms:该任务及其所有子系统在系统执行时花费的总毫秒数级(内核),并在时间间隔内收集。

#guest-ms:任务及其所有子项在虚拟机中运行的总计毫秒数(运行一个虚拟处理器)。


2.9 显示某一个命令所涉及到的进程的上下文切换次数

#pidstat -w -C "qemu-kvm"      #这是一台宿主机qemu-kvm相关进行的上下文切换信息

Linux 2.6.32-358.el6.x86_64 (localhost.localdomain)       2017年03月22日  _x86_64_        (32 CPU)


15时23分50秒       PID   cswch/s nvcswch/s  Command

15时23分50秒      8526      2.87      0.02  qemu-kvm

15时23分50秒     31368      1.88      0.01  qemu-kvm

15时23分50秒     39485      0.08      0.00  qemu-kvm

15时23分50秒     43611   1035.37      3.04  qemu-kvm

15时23分50秒     46882      1.62      0.00  qemu-kvm

#cswch/s: 每秒任务主动(自愿的)切换上下文的次数。主动切换是指当某一任务处于阻塞等待时,将主动让出自己的CPU资源。

#nvcswch/s : 每秒任务被动(不自愿的)切换上下文的次数。被动切换是指CPU分配给某一任务的时间片已经用完,因此将强迫该进程让出CPU的执行权。


2.10 将所有的统计数据结合到一个单一的报告中

 pidstat -urd -h -l  #现在-h的作用就体现出来了,没有-h这三种数据报表是垂直成三份数据报告显示的。

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


#      Time   UID       PID    %usr %system  %guest    %CPU   CPU  minflt/s  majflt/s     VSZ    RSS   %MEM   kB_rd/s   kB_wr/s kB_ccwr/s  Command

 1490167828     0         1    0.00    0.01    0.00    0.02     0      1.67      0.00   46840   7380   0.05     16.78      0.02      0.01  /usr/lib/systemd/systemd --switched-root --system --deserialize 21 

 1490167828     0         3    0.00    0.00    0.00    0.00     0      0.00      0.00       0      0   0.00      0.00      0.00      0.00  ksoftirqd/0

 1490167828     0         4    0.00    0.00    0.00    0.00     0      0.00      0.00       0      0   0.00      0.00      0.00      0.00  kworker/0:0

 1490167828     0         7    0.00    0.00    0.00    0.00     0      0.00      0.00       0      0   0.00      0.00      0.00      0.00  migration/0


2.11 -C正则表达式以及不能与-p混合使用

-p和-C不能混在一起使用,这样输出不了什么结果

# pidstat -C "q.*r"  -p 3,13 1 2  #结果是空的,这两种筛选方式是不能混在一起的。

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:43:32      UID       PID    %usr %system  %guest    %CPU   CPU  Command


# pidstat -C "q.*m$"  #-C支持正则表达式的形式去匹配

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:41:42      UID       PID    %usr %system  %guest    %CPU   CPU  Command

15:41:42      107      1974    0.08    0.26    0.12    0.46     9  qemu-kvm

15:41:42      107      1993    0.03    0.11    0.12    0.26     0  qemu-kvm

15:41:42      107      2004    0.65    0.54    0.41    1.60     0  qemu-kvm

15:41:42      107      2017    8.26    1.07    0.45    9.78     3  qemu-kvm

15:41:42      107      2041    0.94    0.56    0.26    1.77     2  qemu-kvm

# pidstat -C "q.*r" 

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:41:46      UID       PID    %usr %system  %guest    %CPU   CPU  Command

15:41:46       89      1824    0.00    0.00    0.00    0.00     3  qmgr


# pidstat -p 3,13 1 2  #-p可以指定多个pid的形式

Linux 3.10.0-514.6.1.el7.x86_64 (localhost.localdomain) 03/22/17 _x86_64_ (12 CPU)


15:42:24      UID       PID    %usr %system  %guest    %CPU   CPU  Command

15:42:25        0         3    0.00    0.00    0.00    0.00     0  ksoftirqd/0

15:42:25        0        13    0.00    0.00    0.00    0.00     1  ksoftirqd/1


15:42:25      UID       PID    %usr %system  %guest    %CPU   CPU  Command

15:42:26        0         3    0.00    0.00    0.00    0.00     0  ksoftirqd/0

15:42:26        0        13    0.00    0.00    0.00    0.00     1  ksoftirqd/1


Average:      UID       PID    %usr %system  %guest    %CPU   CPU  Command

Average:        0         3    0.00    0.00    0.00    0.00     -  ksoftirqd/0

Average:        0        13    0.00    0.00    0.00    0.00     -  ksoftirqd/1


作者:忙碌的柴少 分类:linux性能检测工具 浏览:1766 评论:0
留言列表
发表评论
来宾的头像