Linux进程系统使用监控pidstat命令

1. 小声哔哔

    在日常运维过程中,我们有时需要关注的是单个进程的系统指标,这时候top的确可以派上用场,但是top命令却又显得有些过于繁杂。之前讲过的sar命令可以关注整个系统的系统指标,那么有没有一个工具可以单独监控某个进程的系统指标呢,pidstat就可以承载这个工作。下面我们就学习下pidstat的使用方法。

    在机器上执行pidstat --help查看pidstat的可用参数如下:

    执行命令man pidstat可以查看命令的详细使用方法及输出结果的含义

    pidstat命令极其强大,是对进程当前使用状态分析的利器,下面介绍几个在日常运维排查过程中常用的命令。

2. pidstat -u: 进程CPU使用情况报告

  • 示例:pidstat -u 查看本机全部进程的CPU使用情况
  • 示例:pidstat -u -p [PID] 2 3 每两秒输出一次进程号为PID的进程CPU使用情况,输出3次

    上图中最后一行的Average是对整个监控数据的平均值,通常监控脚本可以使用这一行的数据。

UID被监控任务的用户标识号,就是进程所属用户的UID,通过cat /etc/passwd可以查看
PID被监控进程的进程号
%usr进程在用户级(应用程序)执行时使用的CPU百分比。 注意,这个字段不包括运行虚拟处理器的时间
%system任务在系统级(内核)执行时使用的CPU百分比
%guest任务在虚拟机(运行虚拟处理器)中占用的CPU百分比 
%CPU任务占用CPU时间的百分比。 在SMP(对称多处理结构)环境中,如果在命令行中输入了选项-I,任务的CPU使用率将除以CPU的总数
CPU进程执行的CPU号
Command进程的命令名
  • 运维总结:日常运维时,首先应关注的是%CPU指标,它代表了进程对CPU使用率的整体情况,然后关注%usr,若该值过高,则需要排查这个时间段是否有大量业务导致服务CPU飙高,若%system过高,则需要排查系统本身的业务是否有系统资源调用,且调用是否合理。

3. pidstat -r: 进程内存使用情况报告

  • 示例:pidstat -r 查看本机全部进程的内存使用情况
  • 示例:pidstat -r -p [PID] 2 3 每两秒输出一次进程号为PID的进程内存使用情况,输出3次

UID被监控任务的用户标识号,就是进程所属用户的UID,通过cat /etc/passwd可以查看
PID被监控进程的进程号
minflt/s进程每秒产生的minor fault(见表格下方注释)总数,即不需要从磁盘加载内存页
majflt/s任务每秒产生的major fault总数,即需要从磁盘加载内存页
VSZVirtual Size:整个进程的虚拟内存使用情况,单位为千字节
RSSResident Set Size:进程使用的除了swap之外的物理内存,单位为千字节。
%MEM进程当前使用的可用物理内存份额
Command进程的命令名
  • 注释:minor page fault:指的就是CPU要执行的指令实际上已经在物理内存page中了, 只是这个page没有被分配给当前进程, 这时CPU就会raise一个minor page fault, 让MMU把这个page分配给当前进程使用, 因此minor page fault并不需要去访问磁盘。
  • 注释:major fault:一个程序可能占几Mb, 但并不是所有的指令都要同时运行, 有些是在初始化时运行, 有些是在特定条件下才会去运行. 因此linux并不会把所有的指令都从磁盘加载到page内存. 那么当cpu在执行指令时, 如果发现下一条要执行的指令不在实际的物理内存page中时, CPU 就会 raise a page fault, 通知MMU把下面要执行的指令从磁盘加载到物理内存page中。

4. pidstat -d: 进程IO使用情况报告

  • 示例:pidstat -d 查看本机全部进程的磁盘IO使用情况
  • 示例:pidstat -d -p [PID] 2 3 每两秒输出一次进程号为PID的进程磁盘IO使用情况,输出3次

UID被监控任务的用户标识号,就是进程所属用户的UID,通过cat /etc/passwd可以查看
PID被监控进程的进程号
kB_rd/s进程每秒读取磁盘数量,单位为千字节
kB_wr/s进程每秒写入或将要写入的磁盘数量,单位为千字节
kB_ccwr/s进程已取消写入磁盘的千字节数。 当任务截断一些脏页面缓存时可能会发生这种情况。 在这种情况下,其他任务已被考虑的某些 IO 将不会发生。
Command进程的命令名
  • 运维经验:有时现网CPU使用较高可能是因为程序频繁的IO导致的,很可惜pidstat没有输出iowait的字段,一般可以直接使用sar -p 1命令监控整个系统的io等待情况,再使用pidstat对可疑进程的IO进行观察。

5. pidstat -w: 进程上下文切换情况报告

  • 示例:pidstat -w 查看本机全部进程的磁盘IO使用情况
  • 示例:pidstat -w -p [PID] 2 3 每两秒输出一次进程号为PID的进程磁盘IO使用情况,输出3次

UID被监控任务的用户标识号,就是进程所属用户的UID,通过cat /etc/passwd可以查看
PID被监控进程的进程号
cswch/s每秒完成的进程的自愿上下文切换总数。 当进程由于获取不到资源而阻塞时,就会发生自愿上下文切换。
nvcswch/s每秒完成的任务的非自愿上下文切换总数。 当任务在其时间片期间执行,然后被迫放弃处理器时,会发生非自愿上下文切换。
Command进程的命令名
  • 运维经验:我们都知道,CPU的多线程并发处理任务其实是通过时间片轮转进行的,当一个线程发生阻塞时会进行上下文切换,将时间片轮转给别的线程,上下文切换本身耗时并不久,但是不排除有时因为某些异常情况导致频繁的上下文切换,进而将CPU资源都浪费在了上下文切换上,这种程序是需要优化的。

6. pidstat -T ALL: 子进程情况报告

    pidstat -T 其实有三个参数

TASK表示报告独立的task。
CHILD表示报告进程下所有线程统计信息。
ALL表示报告独立的task和task下面的所有线程

    示例:pidstat -r -p [PID] -T ALL 2 3 每两秒输出一次进程号为PID的进程及其子进程内存使用情况,输出3次

7. pidstat -t :子线程情况报告

    pidstat -t可以输出子线程的情况报告,有时我们发现仅仅关注主线程的使用情况可能不够,也需要关注子线程的使用情况,可以加上-t参数,对比如下:

    pidstat -u 2:输出CPU使用情况

    pidstat -u -t 2:输出主线程及子线程的CPU使用情况

8. pidstat -C [comm]:进程Command包含comm的进程情况报告

    pidstat -C [comm]可以输出Command包含comm的进程监控报告,个人觉得在生产环境还是比较好用的,因为有时某些程序发生异常时在不断的自重启,PID会不断改变,这时使用PID做监控将会变成一种灾难。

    示例如下图:

9. 总结

    以上仅仅是将pidstat比较常用的参数做了介绍,并结合我自己的运维经验给出了部分需要关注的指标项,如果有兴趣的话可以自行到机器上执行man pidstat查看文档,了解一下其他参数的具体含义。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值