安基网 首页 系统 Linux 查看内容

Linux生产环境CPU使用率100%,教你定位到具体函数

2019-11-13 09:11| 投稿: xiaotiger |来自: 互联网


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率,发现监控报了60%的一般就会报警了,到了100%那就惨啦,做我开发的我们如果自己程序运行时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%看下面:

top - 13:59:19 up 168 days, 23:03, 1 user, load average: 0.04, 0.03, 0.00
Tasks: 216 total, 1 running, 215 sleeping, 0 stopped, 0 zombie
%Cpu0 : 99.0 us, 2.4 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 99.8 us, 1.2 sy, 0.0 ni, 97.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 4028864 total, 973100 free, 711608 used, 2344156 buff/cache
KiB Swap: 1046524 total, 1032336 free, 14188 used. 2920808 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
94804 dev 20 0 49004 3812 3084 R 2.3 0.1 0:00.20 top
94805 dev 20 0 47212 8796 2408 S 1.1 0.2 407:42.92 php-fpm
94806 dev 20 0 47212 8796 2408 S 1.1 0.2 407:42.92 php-fpm
94670 root 20 0 19620 2996 2764 S 1.1 0.1 0:00.03 mysql-systemd-s
94762 dev 20 0 97464 3556 2608 S 1.1 0.1 0:00.08 sshd

从上面可看出,两个php-fpm进程的CPU使用率加起来99.8%了。和最上面的%CPU基本都快到100了,所以,现在我们就可以确定造成服务器CPU 使用率100%的进程是这php-fpmj进程

2,怎么知道是哪个函数

虽然现在我们知道是由于php-fpm进程造成的cpu飙升,但是里面代码那么多,我怎么知道是哪个函数哪块代码出的问题的呢?这个时候,我们就需要用另一个工具perf来分析下,也就是在ssh上输入pref命令来看下:

# -g开启调用关系分析,-p指定php-fpm的进程号94806
$ perf top -g -p 94806

我们通过按方向键,切换到php-fpm,然后按回车键就会展开php-fpm的调用关系,最后我们就会看到,调用关系最终到了 sqrt 和 add_function。所以我们现在就需要看着两个函数了。

3,查看函数

好,那我们来看看这个函数sqrt,add_function这个函数是php内置的,现在看看是出现了什么问题

$ cat app/index.php $x += sqrt($x);
}

echo "It works!"

现在,我们已经看到了,我在上面加了个大循环,这里导致cpu使用率骤增的。

总结,我们知道CPU的使用率其实在生产环境就是直接的反应我们系统性能的重要指标。当我们碰到 我们服务器CPU 使用率升高的时候,不要慌,我们要先借助 top、pidstat 等性能分析工具,先找到导致 CPU 性能问题的来源;然后再使用 perf 相关分析工具,进行查出引起性能问题的具体函数所在。如果大家喜欢或者对大家有帮助,就关注我,让我们一起共同学习共同进步。

下一篇预告,分库分表相关专题



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6758317268397982212/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

 最新
返回顶部