Linux系统是一个多任务操作系统,CPU需要管理多个任务的执行。当CPU性能不足时,系统处理请求的速度会变慢,会导致资源竞争更加激烈,从而使上下文切换更加频繁,浪费CPU时间。

1、核心数

了解服务器的CPU时钟频率和核心数,以便编写能够充分利用多核心并行处理能力的代码。

2、CPU使用率:

使用工具(如top、vmstat等)监控CPU使用率和负载均衡情况,以便及时发现并优化性能瓶颈。

3、缓存大小:

关注缓存大小,并尝试优化数据访问模式以提高缓存命中率,从而减少内存访问延迟。

4、指令集:

了解并利用CPU支持的指令集优化代码,例如使用SIMD(单指令多数据)指令集进行向量计算。


常用的CPU性能分析工具

top

top是一个用于监视Linux系统进程和整体性能的工具,即时显示进程的动态信息。

vmstat

vmstat是一个用于显示关于系统虚拟内存、进程、CPU活动等的统计信息工具。

# 每2秒刷新一次信息
vmstat 2

us(user time):用户进程(用户态)占用的CPU时间百分比。
sy(system time):系统进程(内核态)占用的CPU时间百分比。
id(idle time):CPU的空闲时间百分比。
wa(I/O wait time):CPU等待I/O操作的时间百分比。
st(stolen time):被虚拟机偷走的CPU时间百分比。
gu:标准输出中不常见(略)

pidstat

‌‌pidstat是‌sysstat工具的一个命令,用于监控全部或指定进程的‌cpu、内存、设备IO等系统资源的占用情况。

# 以1秒为周期,获取进程的cpu统计信息   
pidstat -u 1

strace、perf

strace命令主要用于跟踪用户态、内核态的系统调用。

pref命令主要用于系统性能数据的收集和分析,可以帮助我们找出程序的性能瓶颈,提高代码运行效率(​不写后台代码,略过该处分析​)。


总结
cpu性能问题体现在us、sy、wa、si(softirq)等数据中,一般us>70%,sy>30%,wa>5%就比较高了。出现CPU问题时,需逐步分析造成该参数升高的原因。比如,sy过高时是否存在频繁分配内存、I/O操作、创建进程的行为等。