CPU 占用过高
一句话:服务器处理器资源被大量占用,导致响应变慢甚至无响应,常见原因是低效的死循环、大量计算密集型任务、或者并发处理不当。
它是什么
CPU占用过高意味着服务器在拼命计算,但可能是在做无意义的重复工作(比如死循环、低效算法),也可能是真实的高负载(大量用户同时请求计算密集型功能),需要区分是bug还是容量不够。
适合干什么
- 服务器响应变慢,监控显示CPU占用异常高时排查
- 上线新功能后CPU使用率明显上升
不适合干什么
- 网络请求本身就慢(比如等待第三方API响应)的情况,那不消耗CPU,是网络IO等待,问题类型不同
普通人怎么用
先用系统自带工具(如top命令)看是哪个进程占用CPU高,缩小排查范围到具体的服务;再看这段时间是不是有异常大量的请求,还是某个特定功能触发了高CPU占用。
进阶用户怎么用
用CPU性能分析工具(profiler)生成火焰图,能直观看到CPU时间主要花在哪些函数调用上;检查是否有正则表达式灾难性回溯、低效的循环嵌套、或者不合理的同步阻塞操作。
常见误区
- 以为CPU高就是服务器配置不够,先加机器配置,但如果是代码本身效率问题(比如死循环或者低效算法),加再多资源也治标不治本
- 把CPU高和内存泄漏混为一谈,两者是不同的资源问题,需要用不同工具分别排查
和相似工具的区别
- 和memory-leak的区别:CPU高是计算资源被大量占用(可能有也可能没有内存问题),内存泄漏是内存占用持续增长,两者原因和排查方法都不同
入门步骤
- 用系统工具定位是哪个进程CPU占用高
- 分析是正常的高负载还是代码存在效率问题
- 用性能分析工具定位具体代码位置