专栏算法工具链系统性能分析—CPU

系统性能分析—CPU

TROS.Assist2024-01-19
131
0

1. 性能指标

CPU使用率

用户使用率:US:应用程序对CPU的使用。

系统使用率:SY:系统内核对CPU的使用。

等待IO使用率:WA:等待io对CPU的使用。

软中断使用率::SORTIRQS:软中断对CPU的使用

平均负载

平均活跃进程数。平均负载的统计包括了可运行状态和不可中断的进程数。平均负载是以CPU数据来表示的,如果平均负载大于CPU数量表示有线程在等待。

平均负载和cpu使用率没有必然的关系。

上下文切换

上下文切换的时候需要对当前场景进行保存,在回到当前场景时需要恢复,这就意味着系统寄存器、栈和虚拟内存数据的保存和恢复,所以频繁的上下文切换对系统的CPU使用影响比较大。

缓存命中率

CPU速度比内存的访问速度快,为了提高CPU的使用效率,协调CPU和内存的性能差距,系统有缓存的功能,缓存访问的速度大大高于内存,所以系统通对频繁使用的内存数据进行缓存,这样就有一个缓存命中率的概念,缓存命中率的高低也对系统CPU的使用有着影响。

2.常用工具

Top

显示进程对cpu的消耗,以及系统资源使用情况。
avatar
在统计信息中以下几个参数与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 -p pidnum 1
avatar
Pidstat是查看总体cpu占用百分比的另一指令,%usr表示用户进程占用百分比,system表示系统内核占用百分比,%wait表示IO资源占用百分比,%CPU是总体占用百分比。这个指令常用于快速定位指定进程的cpu总体占用情况。

还有一些其他查看系统资源的指令通过指定参数来查看cpu的使用状况。

如:

uptime

uptime查看系统平均负载和系统运行时间。反应系统的cpu资源的占用趋势。
avatar

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. 实战分析

1 通过top指令,发现 persdemo的进程占用CPU 99.7%
avatar
2 使用perf reocrd指令记录进程信息,生成perf.data
avatar
3 使用perf report指令解析记录的进程信息(perf.data),生成persdemo.txt
avatar
4 查看persdemo.txt.
可以看到,主要占用在 main函数
avatar
算法工具链
杂谈
评论0
0/1000