Linux生产环境CPU使用率100%,教你定位到具体函数
在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率,发现监控报了60%的一般就会报警了,到了100%那就惨啦,做我开发的我们如果自己程序运行时CPU使用率一直是100%的话,那么,我们加班肯定逃不掉了,更打击我们自己的强大的自尊心。今天我就将我们线上之前有个100%的CPU给大家讲解下,然后教大家怎么去定位然后发现到具体的函数,然后去修改它就行了
什么是CPU使用率
CPU 使用率,就是除了空闲时间外的其他时间占总 CPU 时间的百分比,
咱们大家平时是不是都是用top 或者 ps来分析CPU使用率的,需要我们注意的是,性能分析工具给出的都是间隔一段时间的平均 CPU 使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证它们用的是相同的间隔时间。
例如,我们的 top 和 ps 分析工具报告的 CPU 使用率,两者的结果可能不太一样,因为 top 默认使用 3 秒时间的间隔,而 ps 工具使用的却是进程的整个生命周期。
怎么找出100%的问题
我们在上面先大致的了解了CPU使用率是什么,下面我就来教大家怎么定位到造成CPU100%的具体函数。
1 用ssh客户端登录到你的服务器
运行 top 命令,然后按一下键盘上 1 键,查看你Linux服务器上每个CPU的使用率情况,如下图
现在,我这个CPU是正常的,就没有给重新放出100%进程了,定位方法时一样的。我就假设我这个php-fpm 进程CPU到了100%看下面:
从上面可看出,两个php-fpm进程的CPU使用率加起来99.8%了。和最上面的%CPU基本都快到100了,所以,现在我们就可以确定造成服务器CPU 使用率100%的进程是这php-fpmj进程
2 怎么知道是哪个函数
虽然现在我们知道是由于php-fpm进程造成的cpu飙升,但是里面代码那么多,我怎么知道是哪个函数哪块代码出的问题的呢?这个时候,我们就需要用另一个工具perf来分析下,也就是在ssh上输入pref命令来看下:
我们通过按方向键,切换到php-fpm,然后按回车键就会展开php-fpm的调用关系,最后我们就会看到,调用关系最终到了 sqrt 和 add_function。所以我们现在就需要看这两个函数了。
3 查看函数
好,那我们来看看这个函数sqrt,add_function这个函数是php内置的,现在看看是出现了什么问题
现在,我们已经看到了,我在上面加了个大循环,这里导致cpu使用率骤增的。
总结,我们知道CPU的使用率其实在生产环境就是直接的反应我们系统性能的重要指标。当我们碰到 我们服务器CPU 使用率升高的时候,不要慌,我们要先借助 top、pidstat 等性能分析工具,先找到导致 CPU 性能问题的来源;然后再使用 perf 相关分析工具,进行查出引起性能问题的具体函数所在。如果大家喜欢或者对大家有帮助,就关注我,让我们一起共同学习共同进步。
往期精选
在公众号“架构师修炼”可获得专属java架构视频资料,更多java、python、人工智能、小程序、大前端等可看菜单,无私奉献本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据