1. 性能指标
CPU使用率
用户使用率:US:应用程序对CPU的使用。
系统使用率:SY:系统内核对CPU的使用。
等待IO使用率:WA:等待io对CPU的使用。
软中断使用率::SORTIRQS:软中断对CPU的使用
平均负载
平均活跃进程数。平均负载的统计包括了可运行状态和不可中断的进程数。平均负载是以CPU数据来表示的,如果平均负载大于CPU数量表示有线程在等待。
平均负载和cpu使用率没有必然的关系。
上下文切换
上下文切换的时候需要对当前场景进行保存,在回到当前场景时需要恢复,这就意味着系统寄存器、栈和虚拟内存数据的保存和恢复,所以频繁的上下文切换对系统的CPU使用影响比较大。
缓存命中率
CPU速度比内存的访问速度快,为了提高CPU的使用效率,协调CPU和内存的性能差距,系统有缓存的功能,缓存访问的速度大大高于内存,所以系统通对频繁使用的内存数据进行缓存,这样就有一个缓存命中率的概念,缓存命中率的高低也对系统CPU的使用有着影响。
2.常用工具
Top

在统计信息中以下几个参数与cpu占用率有关:
Load average:1.00,1.01,1.00 分别对应 1分钟/5分钟/15分钟的平均负载,反应了cpu的占用的趋势,正常还是繁忙。
%CPU行: cpu总体使用率。
us:用户使用cpu百分比。
sy:系统内核使用cpu百分比。
id:剩余的cpu百分比。
wa: IO等待占用百分比,表示当前系统IO资源使用状况。
在按进程统计的数据列表中:
%CPU列:是 进程(COMMAND列对应进程名称)占用的百分比,这项值是需要关注的cpu占用信息。
pidstat
进程的统计信息:CPU使用信息

Pidstat是查看总体cpu占用百分比的另一指令,%usr表示用户进程占用百分比,system表示系统内核占用百分比,%wait表示IO资源占用百分比,%CPU是总体占用百分比。这个指令常用于快速定位指定进程的cpu总体占用情况。
还有一些其他查看系统资源的指令通过指定参数来查看cpu的使用状况。
如:
uptime

Perf
perf是一款linux提供的非常实用的综合性性能分析工具,提供了一个性能分析框架,可以分析硬件资源(CPU,PMU)的功能和软件(计数器和trace)的功能。
大到系统全局性性能,小到进程线程级别,trace的功能可以到函数级别,甚至汇编级别。
使用perf --help之后可以看到perf的二级命令。
Cpu性能分析的常用二级命令:record /report/script/trace,具体看实战部分
3. CPU使用率高的可能原因
• 硬件原因(散热/cpu性能弱/内存不足)
• 频繁上下文切换
• 频繁GC
• 内存泄漏导致
• 块设备操作频繁
• 病毒/程序多/内存使用过多
• 无限循环
• 序列化和反序列化
• 频繁创建新对象
• 共享内存过高
• 不可回收的slab内存过高
• 存在内存大页 cat /proc/meminfo | grep –iE “HugePages_Total|Hugepagesize”
• 网络IO
• 业务高峰
4. 分析思路
1 定位CPU占用高的进程
2 使用perf record获取相关信息的原始数据
3 使用perf report查看进程函数调用栈
4 找到占用CPU严重的函数,分析代码
5. 实战分析

2 使用perf reocrd指令记录进程信息,生成perf.data

3 使用perf report指令解析记录的进程信息(perf.data),生成persdemo.txt

4 查看persdemo.txt.


