记一次线上linux服务器CPU的性能分析
现象:线上环境某个CPU使用率居高不下
排查思路分析:
一、首先查看系统负载,通过top、或者uptime 查看load average
二、在查看进程情况,可通过 top、ps
先解释一下平均负载的概念:
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。
而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
1.CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
3.大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
内存使用率前10行
ps aux | head -1;ps aux | grep -v PID | sort -rn -k +4 | head
CPU使用率前10行
ps aux | head -1;ps aux | grep -v PID | sort -rn -k +3 | head
ps aux | head -1 是 先显示出个字段的名称
grep -v PID 去除字段名称
sort -rn -k +4按照第4列排序
head 默认取前10行
三、再利用 perf 进行分析,分析有两种方式
1、perf top 可以实时分析
2、perf record -g 采样分析(停留15秒钟左右,生成perf.data文件),在利用 perf report 进行解析,找到对应的性能点
3.选择较大比例的进程,进行分析,找到瓶颈(发现json的编解码非常影响性能);至于为何影响性能,下面在进行性能对比分析
总结: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 等工具,排查出引起性能问题的具体函数。