← AI 百科

CPU 占用过高

报错库 · 报错 / 性能 / 运维
一句话:服务器处理器资源被大量占用,导致响应变慢甚至无响应,常见原因是低效的死循环、大量计算密集型任务、或者并发处理不当。

它是什么

CPU占用过高意味着服务器在拼命计算,但可能是在做无意义的重复工作(比如死循环、低效算法),也可能是真实的高负载(大量用户同时请求计算密集型功能),需要区分是bug还是容量不够。

适合干什么

  • 服务器响应变慢,监控显示CPU占用异常高时排查
  • 上线新功能后CPU使用率明显上升

不适合干什么

  • 网络请求本身就慢(比如等待第三方API响应)的情况,那不消耗CPU,是网络IO等待,问题类型不同

普通人怎么用

先用系统自带工具(如top命令)看是哪个进程占用CPU高,缩小排查范围到具体的服务;再看这段时间是不是有异常大量的请求,还是某个特定功能触发了高CPU占用。

进阶用户怎么用

用CPU性能分析工具(profiler)生成火焰图,能直观看到CPU时间主要花在哪些函数调用上;检查是否有正则表达式灾难性回溯、低效的循环嵌套、或者不合理的同步阻塞操作。

常见误区

  • 以为CPU高就是服务器配置不够,先加机器配置,但如果是代码本身效率问题(比如死循环或者低效算法),加再多资源也治标不治本
  • 把CPU高和内存泄漏混为一谈,两者是不同的资源问题,需要用不同工具分别排查

和相似工具的区别

  • 和memory-leak的区别:CPU高是计算资源被大量占用(可能有也可能没有内存问题),内存泄漏是内存占用持续增长,两者原因和排查方法都不同

入门步骤

  • 用系统工具定位是哪个进程CPU占用高
  • 分析是正常的高负载还是代码存在效率问题
  • 用性能分析工具定位具体代码位置