Linux【CPU100% 问题定位】

发布时间 2023-11-01 16:44:38作者: 木乃伊人

一、场景

        在我们项目部署上线的时候,我们是不是会经常去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 等工具,排查出引起性能问题的具体函数。