Linux pidstat命令实战

前言:

前文中我们了解了vmstat命令,其可以监控操作系统整体的CPU、内存、IO运行情况。但是如果我们相对某一个进程进行监控的话,vmstat就难免心有余而力不足。这时就需要本文主角登场,pidstat命令。

pidstat可用于监控全部或指定进程的CPU、内存、IO等系统资源的占用情况。

下面就一起来实战下该命令吧。

1.常规使用

最常用的pidstat命令就是 pidstat 5(5秒刷新一次,用户也可自定义为其他时间段)

root@7bc18553126f:/# pidstat 5
Linux 5.10.76-linuxkit (7bc18553126f) 03/13/22 _aarch64_ (4 CPU)

02:57:51      UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
02:57:56        0     42290    0.40    0.00    0.00    0.00    0.40     0  watch
02:57:56        0     52989  100.00    0.00    0.00    0.00  100.00     3  stress

此时的打印会每5秒输出一次当前所有进程的资源使用情况。

字段含义解释:

PID进程ID
%usr进程在用户空间占用CPU的百分比
%system进程在内核空间占用的CPU的百分比
%guest进程在虚拟机占用的CPU的百分比
%wait进程在等待执行所占用的CPU的百分比
%CPU进程占用的CPU的百分比
CPU处理进程的CPU编号
Command当前进程所对应的命令

2.查看内存使用

使用pidstat -r可以查看具体的内存使用情况

root@7bc18553126f:/# pidstat -r 5
Linux 5.10.76-linuxkit (7bc18553126f) 03/13/22 _aarch64_ (4 CPU)

08:05:59      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
08:06:04        0     54333     32.40      0.00    3020    2500   0.12  watch
08:06:04        0     68296     89.40      0.00    4564    2620   0.13  pidstat

08:06:04      UID       PID  minflt/s  majflt/s     VSZ     RSS   %MEM  Command
08:06:09        0     54333     48.40      0.00    3020    2500   0.12  watch
08:06:09        0     68296     20.40      0.00    4564    2860   0.14  pidstat

同样是5秒钟打印一次进程的内存使用情况。

具体输出字段含义如下:

PID进程ID
minflt/s每秒次缺页错误次数(minor page faults),当虚拟内存地址映射为物理内存地址时,相应的page数据已经加载到page cache,只需要将该page与进程虚拟地址空间进行映射即可
majflt/s每秒主缺页错误次数(major page faults),当虚拟内存映射为物理内存地址时,相应的page数据还在磁盘上,此时则会触发一次major fault,
VSZ虚拟内存大小
RSS常驻内存大小(非swap内存)
%MEM占用内存比
Command当前进程所对应的命令

有关于minflt 和 majflt相关的内容更多可以参考:

page fault的两种区别(major、minor)_程序猿Ricky的日常干货的博客-CSDN博客

Linux对内存的管理, 以及page fault的概念 - 简书

3.显示进程IO使用情况

pidstat也支持通过-d命令来查看IO使用情况

root@7bc18553126f:/# pidstat -d 5
Linux 5.10.76-linuxkit (7bc18553126f) 03/13/22 _aarch64_ (4 CPU)

08:38:02      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
08:38:07        0     71165      0.00      0.00      0.00     297  stress

08:38:07      UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s iodelay  Command
08:38:12        0     71165      0.00      0.00      0.00     298  stress

同样是5秒钟打印一次进程的IO情况。

具体输出字段含义如下:

PID进程ID
kB_rd/s每秒从磁盘读取的字节数(KB为单位)
kB_wr/s每秒写入磁盘的字节数(KB为单位)
kB_ccwr/s任务取消的写入磁盘的字节数(KB为单位),当任务截断脏PageCache时会发生
iodelayIO延迟(以时钟周期为单位),该延迟包含了等待同步块IO完成和swap块IO完成所花费的延迟
Command当前进程对应的命令

4.显示进程上下文切换情况

在之前介绍vmstat命令时,其中有一个cs(context switch)代表每秒上下文切换的次数。

但vmstat给的是总的进程的切换次数,pidstat -w 命令可以展示出每个继承的上下文切换次数。

有关于上下文切换的知识点可以参考: 深入理解CPU上下文切换 - 暗夜心慌方 - 博客园 

root@7bc18553126f:/# pidstat -w 5
Linux 5.10.76-linuxkit (7bc18553126f) 03/13/22 _aarch64_ (4 CPU)

08:59:17      UID       PID   cswch/s nvcswch/s  Command
08:59:22        0     54333      1.80      0.00  watch
08:59:22        0     72353  14601.80  14605.00  stress
08:59:22        0     73113      0.20      0.00  pidstat

同样是5秒输出一次,输出字段含义如下:

PID进程ID
cswch/s每秒主动切换次数
nvcswch/s每秒被动切换次数
Command当前进程对应的命令

主动切换:当前进程无法获取所需资源导致的上下文切换。当IO、内存等系统资源不足时就会发生;

被动切换:当进程由于CPU时间分片已到等原因,被系统强制调度所发生的上下文切换;当有大量进程在争抢CPU时,就容易发生被动切换;

总结:

在平时的使用中主要也就是使用到上面几种方式。

需要注意的点是:上面的命令都可以查看指定进程的资源使用情况(添加-p pid即可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恐龙弟旺仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值