调试 Linux 进程性能问题的 10 个 pidstat 示例
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
- 点赞
- 收藏
- 关注作者
评论(0)