dstat的选项--top-io--top-cpu能够找出占用资源最多的进程,但如果某个资源占用大户存在多个运行实例的话,单凭这两个选项不足以追查出问题所在。

pidstat能够输出每个进程的统计信息,我们可以对这些信息进行排序,作出进一步的判断。

12.5.1 预备知识

pidstat可能默认并没有安装。可以使用下列命令自行安装:

  1. # apt-get install sysstat

12.5.2 实战演练

pidstat包含多种选项,可以生成各种输出。

  • -d:输出I/O统计。
  • -r:输出缺页故障和内存使用情况。
  • -u:输出CPU使用情况。
  • -w:输出任务切换(上下文切换)情况。

输出上下文切换活动:

  1. [root@dev workspace]# pidstat -w | head -5
  2. Linux 5.10.60.1-microsoft-standard-WSL2 (MiHome) 02/05/2022 _x86_64_ (8 CPU)
  3. 07:52:53 PM UID PID cswch/s nvcswch/s Command
  4. 07:52:53 PM 0 1 0.02 0.00 init
  5. 07:52:53 PM 0 7 0.00 0.00 init

pidstat的输出是按照PID排序的。我们可以根据需要,使用sort重新排序输出。下面的命令显示了每秒钟发生上下文切换次数(选项-w输出中的第4列)最多的前5个进程:

  1. [root@dev workspace]# pidstat -w | sort -nr -k 4 | head -5
  2. 07:54:05 PM 0 1536 0.00 0.00 head
  3. 07:54:05 PM 0 1535 0.00 0.00 sort
  4. 07:54:05 PM 0 1534 0.00 0.00 pidstat
  5. 07:54:05 PM 0 806 0.01 0.00 logger
  6. 07:54:05 PM 112 805 0.06 0.00 mariadbd

12.5.3 工作原理

pidstat通过查询内核来获取任务信息。sorthead命令减少了数据量,让我们可以将注意力集中在霸占资源的程序上面。