本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

使用pidstat与perf解决CPU使用率过高的问题

发布:TangLu2019-5-7 11:09分类: 系统管理 标签: top cpu

一、问题前景

在运维工作中经常会出现这样一种问题:“某应用CPU使用率达到100%,虽然知道了是这个应用导致CPU飙升,但是无法定位该应用到底做了什么,怎么办?”

二、问题分析

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

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

yum install sysstat  #安装pidstat
pidstat 3 5  #每3秒输出一次信息,一共输出5次

pidstat命令图示:


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:符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。


三、总结

当以后碰到CPU使用率升高的问题,可以借助top、pidstat等工具,找到引发CPU性能问题的来源。再使用 perf 等工具,排查出引起性能问题的具体函数。

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《使用pidstat与perf解决CPU使用率过高的问题
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-491.html  [生成短网址]

已有 0/736 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~