【系统运维】使用pidstat命令查看进程资源占用

TangLu 未命名 2022-03-17 8916 0

一、pidstat命令介绍

pidstat来自sysstat工具集,用于监控进程的CPU、内存、磁盘IO等系统资源占用情况。pidstat首次运行时显示系统从启动开始到现在的统计信息,再次运行pidstat后将显示上次运行命令以后的统计信息。可以通过指定统计次数和时间间隔来获取所需统计信息


二、安装pidstat

yum install sysstat


三、pidstat常用选项

-u:默认选项,显示各个进程CPU资源占用情况

-r:显示各个进程内存资源占用情况

-d:显示各个进程IO资源占用情况

-p:查看指定进程号的资源占用情况,默认为ALL
-w:显示每个进程的上下文切换情况
-T { TASK | CHILD | ALL }:TASK表示报告独立的task,CHILD表示报告进程下所有线程统计信息。ALL表示报告独立的task和task下面的所有线程。

-h:在一行上显示了所有活动,这样其他程序可以容易解析


四、pidstat使用示例

1、查看CPU资源使用情况

#两个命令等效
pidstat
pidstat -u -p ALL

· PID:进程ID
· %usr:进程在用户空间占用cpu的百分比
· %system:进程在内核空间占用cpu的百分比
· %guest:进程在虚拟机占用cpu的百分比
· %CPU:进程占用cpu的百分比
· CPU:处理进程的cpu编号
· Command:当前进程对应的命令


2、查看内存资源使用情况

pidstat -r

· PID:进程标识符
· Minflt/s:任务每秒发生的次要错误,不需要从磁盘中加载页
· Majflt/s:任务每秒发生的主要错误,需要从磁盘中加载页
· VSZ:虚拟地址大小,虚拟内存的使用KB
· RSS:常驻集合大小,非交换区五里内存使用KB
· Command:task命令名


3、查看磁盘IO使用情况

pidstat -d

· PID:进程id
· kB_rd/s:每秒从磁盘读取的KB
· kB_wr/s:每秒写入磁盘KB
· kB_ccwr/s:任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生。
· COMMAND:task命令名


五、使用pidstat结合perf定位CPU异常问题

1、使用top+pidstat工具定位进程

说到查看CPU使用率的工具,第一反应肯定是top。虽然top可以很快速的查看当前所有CPU的使用情况,但是无法细分用户态和内核态。为了弥补这个问题,可以使用pidstat工具。pidstat显示了用户态 CPU 使用率 (%usr)、内核态 CPU 使用率(%system)、运行虚拟机 CPU 使用率(%guest)、等待 CPU 使用率(%wait)以及总的 CPU 使用率(%CPU)

pidstat 3 5  #每3秒输出一次信息,一共输出5次


pidstat.png


2、使用perf工具精准定位

现在通过top和pidstat已经能够快速找到 CPU 使用率较高(比如 100% )的进程。接下来如何判断占用CPU的到底是代码里的哪个函数呢?只有找到它才能针对性地进行优化解决。这里推荐perf工具,perf可以分析系统的各种事件和内核性能,还可以用来分析指定应用程序的性能问题。使用perf分析CPU性能问题第一种常见用法是perf top,类似于 top,它能够实时显示占用 CPU 时钟最多的函数或者指令:

perf.png


输出结果第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,perf 总共采集了 5千个CPU事件,而总事件数则为 1.3亿个。如果采样数过少(比如只有十几个),那没什么实际参考价值。再往下是表格式样的数据:
Overhead:该符号的性能事件在所有采样中的比例,用百分比来表示。
Shared:该函数或指令所在的动态共享对象,如内核、进程名、动态链接库名、内核模块名等。
Object:动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。
Symbol:符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示

评论