linux

Centos系统诊断CPU跑高问题

发布时间:6年前热度: 3125 ℃评论数:

一、perf

1、安装perf:


sudo yum install perf -y

(第二个软件包必须与你的内核版本相匹配,你可以先安装linux-tools-common并调用perf来告诉你它需要哪个软件包。)


2、在你所有的CPU上记录10秒钟的回溯:


sudo perf record -g -a sleep 10

3、分析你的录音:


sudo perf report


二、Strace

1、安装perf:

yum install strace

2、技巧:运行 top 时,按「1」打开 CPU 列表,按「shift+p」以 CPU 排序。

在本例中大家很容易发现 CPU 主要是被若干个 PHP 进程占用了,同时 PHP 进程占用的比较多的内存,不过系统内存尚有结余,SWAP 也不严重,这并不是问题主因。

不过在 CPU 列表中能看到 CPU 主要消耗在内核态「sy」,而不是用户态「us」,和我们的经验不符。Linux 操作系统有很多用来跟踪程序行为的工具,内核态的函数调用跟踪用「strace」,用户态的函数调用跟踪用「ltrace」,所以这里我们应该用「strace」:

shell> strace -p <PID>

不过如果直接用 strace 跟踪某个进程的话,那么等待你的往往是满屏翻滚的字符,想从这里看出问题的症结并不是一件容易的事情,好在 strace  可以按操作汇总时间:

shell> strace -cp <PID>

通过「c」选项用来汇总各个操作的总耗时


perf,Strace

手机扫码访问