0x0034's Blog.

pidstat 详解

字数统计: 1.6k阅读时长: 8 min
2022/01/02

功能

pidstat命令用于监视当前由Linux内核管理的单个任务。

它为使用选项-p选择的每个任务或Linux内核管理的每个任务(如果使用了选项-p ALL)写入标准输出。

不选择任何任务相当于指定-p ALL,但报告中将只显示活动任务(统计值非零的任务)。

命令参数

参数 用途/含义
u 默认参数, 显示进程的CPU利用率.
R 报告实时优先级和调度策略信息。
s 报告堆栈利用率。
t 选定任务关联的线程的统计信息。
U 显示正在监视的任务的真实用户名,而不是UID。如果指定了用户名,则仅显示属于指定用户的任务。
v 报告内核表的值。
p 指定Pid,默认情况下为ALL
l 显示命令的名称,包括它的全部参数
C 仅显示Command中包含匹配字符串的进程
d 报告I/O统计信息
G 显示符合匹配进程名字的进程

输出字段含义

  • 用户态 CPU 使用率 (%usr);
  • 内核态 CPU 使用率(%system);
  • 运行虚拟机 CPU 使用率(%guest);
  • 等待 CPU 使用率(%wait);
  • 以及总的 CPU 使用率(%CPU)。
  • 任务每秒发生的次要故障总数,这些故障不需要从磁盘加载内存页。(minflt/s)
  • 任务每秒发生的主要故障总数,这些故障不需要从磁盘加载内存页。(minflt/s)
  • 任务当前使用的可用物理内存共享。(%MEM)
  • 任务及其所有子任务在时间间隔内发生并收集的次要故障总数。(minflt-nr)
  • 任务及其所有子任务在时间间隔内发生并收集的主要故障总数。(majflt-nr)
  • 作为堆栈为任务保留但不一定使用的内存量(以KB为单位)。(StkSize)
  • 任务引用的用作堆栈的内存量(以KB为单位)。(StkRef)
  • 线程组长的标识号。(TGID)
  • 被监听线程的识别号(TID)
  • 自愿上下文的总数切换每秒完成的任务。当任务块需要不可用的资源时,会发生自愿上下文切换。(cswch/s)
  • 非自愿上下文的总数切换每秒完成的任务。当任务在其时间片的持续时间内执行并且然后被迫放弃处理器时,发生非自愿上下文切换。(nvcswch/s)

使用案例

统计进程内存和线程的使用情况(以人类可阅读的方式)

1
2
3
4
5
6
7
8
9
10
[root@containerd ~]# pidstat -r --human -t 2 1
Linux 4.18.0-305.19.1.el8_4.x86_64 (containerd) 01/02/22 _x86_64_ (4 CPU)

12:47:40 UID TGID TID minflt/s majflt/s VSZ RSS %MEM Command
12:47:42 0 94608 - 514.85 0.00 16.4M 11.2M 0.1% pidstat
12:47:42 0 - 94608 514.85 0.00 16.4M 11.2M 0.1% |__pidstat

Average: UID TGID TID minflt/s majflt/s VSZ RSS %MEM Command
Average: 0 94608 - 514.85 0.00 16.4M 11.2M 0.1% pidstat
Average: 0 - 94608 514.85 0.00 16.4M 11.2M 0.1% |__pidstat

统计进程IO

1
2
3
4
5
6
7
8
[root@containerd ~]# pidstat -d 2 1
Linux 4.18.0-305.19.1.el8_4.x86_64 (containerd) 01/02/22 _x86_64_ (4 CPU)

12:52:01 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
12:52:03 0 94584 0.00 0.00 0.00 1 kworker/0:0-mm_percpu_wq

Average: UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
Average: 0 94584 0.00 0.00 0.00 1 kworker/0:0-mm_percpu_wq

进程上下文切换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[root@containerd ~]# pidstat -w 2 1
Linux 4.18.0-305.19.1.el8_4.x86_64 (containerd) 01/02/22 _x86_64_ (4 CPU)

12:53:27 UID PID cswch/s nvcswch/s Command
12:53:29 0 11 17.91 0.00 rcu_sched
12:53:29 0 13 0.50 0.00 watchdog/0
12:53:29 0 16 0.50 0.00 watchdog/1
12:53:29 0 22 0.50 0.00 watchdog/2
12:53:29 0 28 0.50 0.00 watchdog/3
12:53:29 0 46 1.00 0.00 khugepaged
12:53:29 0 931 0.50 0.00 irqbalance
12:53:29 0 42883 10.95 0.00 vmtoolsd
12:53:29 0 57780 0.50 0.00 sssd
12:53:29 0 94581 1.99 0.00 kworker/3:1-events_freezable
12:53:29 0 94584 20.90 0.00 kworker/0:0-events_power_efficient
12:53:29 0 94596 1.99 0.00 kworker/1:2-events_power_efficient
12:53:29 0 94611 0.50 0.00 kworker/2:1-events_power_efficient
12:53:29 0 94640 0.50 0.00 kworker/0:2-ata_sff
12:53:29 0 94669 0.50 0.00 pidstat

Average: UID PID cswch/s nvcswch/s Command
Average: 0 11 17.91 0.00 rcu_sched
Average: 0 13 0.50 0.00 watchdog/0
Average: 0 16 0.50 0.00 watchdog/1
Average: 0 22 0.50 0.00 watchdog/2
Average: 0 28 0.50 0.00 watchdog/3
Average: 0 46 1.00 0.00 khugepaged
Average: 0 931 0.50 0.00 irqbalance
Average: 0 42883 10.95 0.00 vmtoolsd
Average: 0 57780 0.50 0.00 sssd
Average: 0 94581 1.99 0.00 kworker/3:1-events_freezable
Average: 0 94584 20.90 0.00 kworker/0:0-events_power_efficient
Average: 0 94596 1.99 0.00 kworker/1:2-events_power_efficient
Average: 0 94611 0.50 0.00 kworker/2:1-events_power_efficient
Average: 0 94640 0.50 0.00 kworker/0:2-ata_sff
Average: 0 94669 0.50 0.00 pidstat

查看指定进程和他的派生线程的状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@containerd ~]# pidstat -t -p 1021 2 1
Linux 4.18.0-305.19.1.el8_4.x86_64 (containerd) 01/02/22 _x86_64_ (4 CPU)

12:54:16 UID TGID TID %usr %system %guest %wait %CPU CPU Command
12:54:18 0 1021 - 0.00 0.00 0.00 0.00 0.00 1 containerd
12:54:18 0 - 1021 0.00 0.00 0.00 0.00 0.00 1 |__containerd
12:54:18 0 - 1050 0.00 0.00 0.00 0.00 0.00 0 |__containerd
12:54:18 0 - 1051 0.00 0.00 0.00 0.00 0.00 0 |__containerd
12:54:18 0 - 1052 0.00 0.00 0.00 0.00 0.00 2 |__containerd
12:54:18 0 - 1053 0.00 0.00 0.00 0.00 0.00 2 |__containerd
12:54:18 0 - 1054 0.00 0.00 0.00 0.00 0.00 3 |__containerd
12:54:18 0 - 1077 0.00 0.00 0.00 0.00 0.00 3 |__containerd
12:54:18 0 - 1091 0.00 0.00 0.00 0.00 0.00 0 |__containerd
12:54:18 0 - 1092 0.00 0.00 0.00 0.00 0.00 0 |__containerd
12:54:18 0 - 1125 0.00 0.00 0.00 0.00 0.00 3 |__containerd
12:54:18 0 - 1127 0.00 0.00 0.00 0.00 0.00 2 |__containerd

Average: UID TGID TID %usr %system %guest %wait %CPU CPU Command
Average: 0 1021 - 0.00 0.00 0.00 0.00 0.00 - containerd
Average: 0 - 1021 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1050 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1051 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1052 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1053 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1054 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1077 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1091 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1092 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1125 0.00 0.00 0.00 0.00 0.00 - |__containerd
Average: 0 - 1127 0.00 0.00 0.00 0.00 0.00 - |__containerd
CATALOG
  1. 1. 功能
  2. 2. 命令参数
  3. 3. 输出字段含义
  4. 4. 使用案例
    1. 4.1. 统计进程内存和线程的使用情况(以人类可阅读的方式)
    2. 4.2. 统计进程IO
    3. 4.3. 进程上下文切换
    4. 4.4. 查看指定进程和他的派生线程的状态