Linux【CPU100% 问题定位】
一、场景
在我们项目部署上线的时候,我们是不是会经常去Linux服务器上查查服务器的CPU使用率,或者是运维经常会盯Linux的CPU使用率。如果CPU使用率一直100%,如何查找并解决问题?
二、步骤
2.1、定位到进程
使用top 和 ps分析工具报告的CPU 使用率,定位到进程。是那个进程占用了CPU就清楚了。
注意:load average 后面的值比较大,就该注意,linux处于超负荷运行中。
2.2、定位到函数
虽然现在我们知道是由于那个进程造成的cpu飙升,但是里面代码那么多,我怎么知道是哪个函数哪块代码出的问题的呢?这个时候,我们就需要用另一个工具perf来分析下,也就是在ssh上输入pref命令来看下:
# -g开启调用关系分析,-p指定php-fpm的进程号94806
$ perf top -g -p 94806
2.3、定位函数详情
看看这个函数sqrt,add_function这个函数是php内置的,现在看看是出现了什么问题
$ cat app/index.php $x += sqrt($x);
}
echo "It works!"
我在上面加了个大循环,这里导致cpu使用率骤增的。
三、小结
CPU 使用率是最直观和最常用的系统性能指标,更是在排查性能问题时,通常会关注的第一个指标。
所以更要熟悉它的含义,尤其要弄清楚用户(%user)、Nice(%nice)、系统(%system)、等待 I/O(%iowait)、中断(%irq)以及软中断(%softirq)这几种不同 CPU 的使用率。比如说:
- 用户 CPU 和 Nice CPU 高,说明用户态进程占用了较多的 CPU,所以应该着重排查进程的性能问题。
- 系统 CPU 高,说明内核态占用了较多的 CPU,所以应该着重排查内核线程或者系统调用的性能问题。
- I/O 等待 CPU 高,说明等待 I/O 的时间比较长,所以应该着重排查系统存储是不是出现了 I/O 问题。
- 软中断和硬中断高,说明软中断或硬中断的处理程序占用了较多的 CPU,所以应该着重排查内核中的中断服务程序。
碰到 CPU 使用率升高的问题,可以借助 top、pidstat 等工具,确认引发 CPU 性能问题的来源;再使用 perf 等工具,排查出引起性能问题的具体函数。