调试 Linux 进程性能问题的 10 个 pidstat 示例

举报
Tiamo_T 发表于 2021/10/26 13:30:23 2021/10/26
【摘要】 pidstat 代表 PID 统计。 该工具可以监控由内核管理的单个进程并生成报告。它可以监视特定的 PID(进程 ID)或系统上运行的所有进程。 pidstat 是 sysstat 实用程序的一部分。 该工具报告各种统计信息,包括进程使用的 CPU、进程的磁盘使用情况统计信息、与选定任务和子进程关联的线程的统计信息。

pidstat 代表 PID 统计。

该工具可以监控由内核管理的单个进程并生成报告。它可以监视特定的 PID(进程 ID)或系统上运行的所有进程。

pidstat 是 sysstat 实用程序的一部分。

该工具报告各种统计信息,包括进程使用的 CPU、进程的磁盘使用情况统计信息、与选定任务和子进程关联的线程的统计信息。

来安装 systat 包来使用这个命令。

yum install sysstat

1. 显示所有正在运行的进程(或特定进程)的统计信息

使用 -p ALL 选项查看所有正在运行的进程的性能统计信息,如下所示。

默认情况下,这将显示 CPU 使用率。但是,您可以将其更改为任何其他性能统计信息,如后面的示例所示。

# pidstat -p ALL | wc -l
165

# pidstat -p ALL | head
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20        _x86_64_

05:00:03          PID    %usr %system  %guest    %CPU   CPU  Command
05:00:03            1    0.00    0.00    0.00    0.00     0  init
05:00:03            2    0.00    0.00    0.00    0.00     0  kthreadd
05:00:03            3    0.00    0.00    0.00    0.00     0  ksoftirqd/0
05:00:03            6    0.00    0.00    0.00    0.00     0  migration/0
05:00:03            7    0.00    0.00    0.00    0.00     0  watchdog/0
05:00:03            8    0.00    0.00    0.00    0.00     0  cpuset
05:00:03            9    0.00    0.00    0.00    0.00     0  khelper

使用 -p PID 监视特定进程的性能统计信息,如下所示。


# pidstat -p 13203
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20        _x86_64_

05:04:29          PID    %usr %system  %guest    %CPU   CPU  Command
05:04:29        13203    0.00    0.00    0.00    0.00     0  vim


2. 使用 -C 根据进程名称显示性能统计信息

以下示例将显示匹配特定关键字(例如:mysql)的所有进程的性能统计信息。

# pidstat -C "mysql"
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20        _x86_64_

06:33:14          PID    %usr %system  %guest    %CPU   CPU  Command
06:33:14        23132    0.00    0.00    0.00    0.00     0  mysqld_safe
06:33:14        23493    0.06    0.02    0.00    0.08     0  mysqld

注意:在上面的例子中,选项 -C 代表“命令名称”。即它将使用给定的关键字搜索进程的命令名称。

3. 以一定的间隔重复输出

默认情况下,不会重复输出。例如,选项 -u 是显示任务的 CPU 使用统计信息,这是 pidstat 命令给出的默认统计信息。Thsi 将只显示输出一次。

# pidstat -p 23493
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20       _x86_64_

06:52:35          PID    %usr %system  %guest    %CPU   CPU  Command
06:52:36        23493    1.00    0.00    0.00    1.00     0  mysqld

要重复输出,请指定以秒为单位的间隔作为最后一个参数。例如,以下示例将每 1 秒重复输出一次(直到您按 Ctrl-C)。

# pidstat -p 23493 1
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20       _x86_64_

06:52:35          PID    %usr %system  %guest    %CPU   CPU  Command
06:52:36        23493    1.00    0.00    0.00    1.00     0  mysqld
06:52:37        23493    0.00    0.00    0.00    0.00     0  mysqld
06:52:38        23493    0.00    0.00    0.00    0.00     0  mysqld
06:52:39        23493    0.00    0.00    0.00    0.00     0  mysqld
06:52:40        23493    0.00    0.00    0.00    0.00     0  mysqld
06:52:41        23493    0.00    0.00    0.00    0.00     0  mysqld
..

以下将每 5 秒重复输出一次(直到您按 Ctrl-C)。

#pidstat -p 23493 5

4. 使用 -d 显示特定进程的 I/O 统计信息

使用选项 -d 报告进程的 I/O 统计信息。它的输出显示了不同的属性,如 PID、磁盘读写速度(以 kB/s 为单位),如下所示。

以下示例每 1 秒显示 PID 23493 的磁盘使用情况。

# pidstat -p 23493 -d 1
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/20        _x86_64_

06:48:33          PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
06:48:34        23493      0.00      0.00      0.00  mysqld
06:48:35        23493      0.00      0.00      0.00  mysqld
06:48:36        23493      0.00      0.00      0.00  mysqld
06:48:37        23493      0.00      0.00      0.00  mysqld
06:48:38        23493      0.00      0.00      0.00  mysqld
06:48:39        23493      0.00      0.00      0.00  mysqld
06:48:40        23493      0.00      0.00      0.00  mysqld
06:48:41        23493      0.00      0.00      0.00  mysqld

5. 使用 -r 显示特定进程的分页活动

使用选项 -r 显示给定任务 (PID) 的页面错误和内存利用率。

# pidstat -p 23493 -r 1
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

06:58:48          PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
06:58:49        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:50        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:51        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:52        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:53        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:54        23493      0.00      0.00  398876  33468   3.28  mysqld
06:58:55        23493      0.00      0.00  398876  33468   3.28  mysqld

6. 使用选项 -l 显示命令名称及其参数

默认情况下,pidstat 仅显示命令名称。即没有命令的完整路径及其参数。例如,在命令列中,您只会看到“java”(它只是程序的名称)。

$ pidstat -C java
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

11:00:25       PID    %usr %system  %guest    %CPU   CPU  Command
11:00:25      3288    0.04    0.03    0.00    0.07     0  java
11:00:25     17861    0.03    0.02    0.00    0.05     6  java

但是,当您使用选项 -l 时,它将显示命令的完整路径及其所有参数,如下所示。

$ pidstat -C java -l
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

11:00:31       PID    %usr %system  %guest    %CPU   CPU  Command
11:00:31      3288    0.04    0.03    0.00    0.07     0  /usr/bin/java -Djava.util.logging.config.file=/home/tomcat/apache-tomcat-7.0.56/conf/logging.properties
11:00:31     17861    0.03    0.02    0.00    0.05     6  java -jar /home/rabbit/myapp.jar /home/app/conf/myapp.conf

为了定期获取任务的统计信息,只需传递您希望查看统计信息的秒数,

# pidstat -p 23493 1
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

06:25:50          PID    %usr %system  %guest    %CPU   CPU  Command
06:25:51        23493    0.00    0.00    0.00    0.00     0  mysqld
06:25:52        23493    0.00    0.00    0.00    0.00     0  mysqld

如上所示,每 1 秒观察一次 mysqld 进程的统计信息。

您还可以从 top 命令输出中获取一些进程 ID,并在此处观看以了解其定期使用系统资源的情况。

7. 定期显示输出 X 次

也可以在给定的时间间隔内获取特定次数的报告,以获取如下所示的过程列表。

添加次数作为最后一个参数(在以秒为单位的间隔之后)。

例如,下面将显示输出 5 次(以 2 秒的固定间隔)。在报告结束时,它还将显示“平均值”值。

# pidstat 2 5
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

07:14:11          PID    %usr %system  %guest    %CPU   CPU  Command
07:14:13         1445    0.00    0.50    0.00    0.50     0  pidstat
07:14:13        28222    0.50    0.00    0.00    0.50     0  cma

07:14:13          PID    %usr %system  %guest    %CPU   CPU  Command
07:14:15         1445    0.00    0.50    0.00    0.50     0  pidstat
07:14:15        28222    0.00    0.50    0.00    0.50     0  cma

07:14:15          PID    %usr %system  %guest    %CPU   CPU  Command
07:14:17         1445    0.50    0.00    0.00    0.50     0  pidstat
07:14:17        19614    0.00    0.50    0.00    0.50     0  nailswebd

07:14:17          PID    %usr %system  %guest    %CPU   CPU  Command
07:14:19         1445    0.50    0.50    0.00    1.00     0  pidstat

07:14:19          PID    %usr %system  %guest    %CPU   CPU  Command
07:14:21         1445    0.00    0.51    0.00    0.51     0  pidstat
07:14:21        28222    0.00    0.51    0.00    0.51     0  cma

Average:          PID    %usr %system  %guest    %CPU   CPU  Command
Average:         1445    0.20    0.40    0.00    0.60     -  pidstat
Average:        19614    0.00    0.10    0.00    0.10     -  nailswebd
Average:        28222    0.10    0.20    0.00    0.30     -  cma

8. 使用 -T 显示选定进程及其子进程的统计信息

使用选项 -T 指定 CHILD 或 TASKS。在这种情况下,将报告 TASKS 或任务及其所有子项的统计数据。您也可以指定 ALL。

-T 的可能值:CHILD、TASKS 或 ALL。

# pidstat -T CHILD | head 
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

10:13:34  IST       PID    usr-ms system-ms  guest-ms  Command
10:13:34  IST         1      7950      3340         0  init
10:13:34  IST         3         0       420         0  ksoftirqd/0
10:13:34  IST         8         0        10         0  migration/0
10:13:34  IST        10         0      1190         0  rcu_sched
10:13:34  IST        11        10         0         0  watchdog/0
10:13:34  IST        12        10         0         0  watchdog/1
10:13:34  IST        13         0       450         0  ksoftirqd/1

9. 使用 -t 以树格式显示依赖进程的统计信息

使用选项 -t,您可以以树格式显示输出,如下所示。

# pidstat -t -C "mysql"
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

18:47:54          PID       TID    %usr %system  %guest    %CPU   CPU  Command
18:47:54         1646        -     0.00    0.00    0.00    0.00     0  mysql
18:47:54           -       1646    0.00    0.00    0.00    0.00     0  |__mysql
18:47:54        23132        -     0.00    0.00    0.00    0.00     0  mysqld_safe
18:47:54           -      23132    0.00    0.00    0.00    0.00     0  |__mysqld_safe
18:47:54        23493        -     0.06    0.02    0.00    0.08     0  mysqld
18:47:54           -      23493    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23504    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23509    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23510    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23512    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23515    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23516    0.01    0.00    0.00    0.02     0  |__mysqld
18:47:54           -      23517    0.00    0.00    0.00    0.00     0  |__mysqld
18:47:54           -      23518    0.01    0.01    0.00    0.02     0  |__mysqld
18:47:54           -      23519    0.00    0.00    0.00    0.00     0  |__mysqld
..

10. 使用 -h 在一行上水平显示所有统计信息

如果您要求 pidstat 报告多个统计数据,它会显示一个又一个统计数据。在下面的示例中,它将首先显示选项“r”的性能统计信息,然后是选项“u”,最后是选项“d”。

# pidstat -rud

但是,如果您希望单个进程的所有这些统计信息都显示在一行中,请使用选项 -h,如下所示。

# pidstat -rud -h | head
Linux 3.0.101-0.7.17-default (thegeekstuff)    07/30/14        _x86_64_

#      Time       PID    %usr %system  %guest    %CPU   CPU  minflt/s  majflt/s     VSZ    RSS   %MEM   kB_rd/s   kB_wr/s kB_ccwr/s  Command
 1406823329         1    0.04    0.19    0.00    0.24     2     21.50      0.03   26944   2768   0.07     -1.00     -1.00     -1.00  init
 1406823329         3    0.00    0.03    0.00    0.03     0      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  ksoftirqd/0
 1406823329         8    0.00    0.00    0.00    0.00     0      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  migration/0
 1406823329        10    0.00    0.08    0.00    0.08     2      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  rcu_sched
 1406823329        13    0.00    0.03    0.00    0.03     1      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  ksoftirqd/1
 1406823329        14    0.00    0.00    0.00    0.00     1      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  migration/1
 1406823329        18    0.00    0.01    0.00    0.01     2      0.00      0.00       0      0   0.00     -1.00     -1.00     -1.00  ksoftirqd/2
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。