CPU使用率飙到80%甚至更高,系统响应慢得像蜗牛,业务请求频繁超时——这种场景,相信不少运维同行都经历过。问题根源往往没那么复杂,但排查起来却需要点章法。下面就把常见的排查思路和处理手段拆开来讲,希望能帮到你。

问题现象
CPU使用率或负载过高时,典型的表现包括:
- 业务服务异常:SSH远程连接响应缓慢、操作卡顿,严重时甚至无法建立连接。
- 网站或应用程序响应时间显著增加,页面加载缓慢。
- 请求频繁超时、接口返回失败,业务处理能力明显下降。
- 系统资源异常:实例CPU使用率持续高于80%,甚至接近100%。
- 系统负载(Load A verage)持续超过CPU逻辑核数(如4核机器Load > 4)。
- 云监控平台已触发高负载相关告警(信息/邮件通知)。
问题原因
导致CPU飙升的元凶,通常逃不出这几类:
- 高计算消耗进程:代码逻辑缺陷(比如死循环)、执行复杂计算任务,或者处理高并发业务请求(包括正常流量与恶意攻击),都会让特定进程吃掉大量CPU。
- I/O性能瓶颈:磁盘读写频繁或存储性能不足,导致进程长时间等待I/O,从而推高系统平均负载。
- 内核或系统调用:频繁的上下文切换、内核任务或驱动程序异常,导致系统态CPU使用率升高。
- 异常或恶意程序:实例被植入挖矿程序、木马病毒,或者存在Rootkit隐藏进程,悄无声息地消耗计算资源。
解决方案
解决问题的第一步,是定位具体指标——到底CPU是花在用户态、内核态还是I/O等待上?用top工具打个底,再配合perf、iotop或vmstat深入分析,最后对症下药。
步骤一:定位CPU瓶颈指标
通过VNC连接登录ECS实例。在控制台找到目标实例,单击“远程连接”,选择“通过VNC远程连接”,输入账号和密码登录。
运行sudo top查看系统负载和进程活动。在top交互界面按P键,按CPU使用率降序排列进程,找出消耗最高的PID和进程名。
- 若某个业务进程(如
ja va、python、php-fpm)CPU使用率持续高于80%,请参考“处理业务进程繁忙”。 - 若
%Cpu(s)中的I/O等待(wa)持续高于20%,用户态(us)和内核态(sy)都很低,且平均负载(Load A verage)远超CPU核数,说明CPU在空闲等待磁盘响应,请参考“处理磁盘I/O瓶颈”。
当进程等待磁盘I/O完成时,会进入D状态(不可中断睡眠),此时进程无法被终止。大量D状态进程堆积表明磁盘响应缓慢,导致CPU空闲等待,从而推高系统负载。
- 若
%Cpu(s)中的sy(system)持续高于30%,通常表示内核频繁执行系统调用或中断处理,请参考“处理内核或系统调用繁忙”。 - 若
%Cpu(s)中的si(softirq)持续高于15%,表明网络流量较高,请参考“处理网络中断繁忙”。
步骤二:针对性分析并处理
处理业务进程繁忙
分析并优化代码:使用性能分析工具定位热点代码。
- Ja va应用:使用
jstack导出线程栈,搜索处于RUNNABLE状态的线程,观察调用栈是否存在长时间停留在某个特定方法中。 - C/C++应用:使用
perf top -p查看具体消耗CPU的函数符号。
根据分析结果优化算法、修复死循环或减少不必要的计算。
应对应用层攻击:若遭受恶意的应用层CC攻击,出现大量异常的HTTP请求,建议部署Web应用防火墙(WAF)进行防护。具体操作可参考WAF接入文档。
升级资源:若为正常业务增长导致的资源瓶颈,应升级实例规格。
处理磁盘I/O瓶颈
定位高I/O进程:可参考Linux系统磁盘I/O负载过高的处理文档。
检查是否有D状态进程堆积:
sudo ps -axjf | grep " D"
处理措施:
- 应用优化:降低日志级别、为数据库查询添加索引以减少磁盘读写。
- 升级存储:可升级云盘类型(如将ESSD PL1升级至ESSD PL2/PL3)以提升IOPS和吞吐量。注意,云盘最终IOPS受挂载实例规格限制,若实例规格的IOPS上限低于云盘能力,需同步升级实例规格。
- 重启系统:若存在D状态进程堆积,可通过重启系统解决。
处理内核或系统调用繁忙
检查上下文切换:运行vmstat 1命令,观察cs(context switch)列的数值。若数值持续超过100,000,说明上下文切换过于频繁,需检查应用程序是否存在过多的线程创建/销毁。
检查内核任务:若kswapd0进程占用率高,说明物理内存不足,内核正在频繁进行内存回收,建议升级实例规格。
物理内存不足时,kswapd0频繁扫描页面、执行回收和换出操作,这些计算密集型任务会消耗大量CPU资源,导致使用率升高。
处理网络中断繁忙
分析流量:使用iftop或iptraf-ng等工具分析网络流量来源和类型。
检查配置:对于高网络负载,可开启网卡多队列将中断分散到多个CPU核心。
网络攻击应对方案:
- 攻击者IP地址确定后,可通过管理安全组规则拦截已知非法IP地址。
- 大流量DDoS攻击:当遭受高频DDoS攻击时,峰值流量可能超出DDoS基础防护的黑洞阈值,导致云产品进入黑洞状态无法访问。此时需启用DDoS高防服务以确保服务可用性。
后续建议
- 配置监控告警:对CPU使用率、负载、I/O等待等指标设置合理的告警阈值,实现早期预警。若需对Linux系统指标进行历史回溯与分析,可使用
atop工具监控。 - 定期安全巡检:利用云安全中心定期对主机进行漏洞扫描、病毒查杀和基线风险检查,修复潜在安全隐患。
- 定期审查与优化:定期对系统和应用进行性能审计和代码审查,发现并解决潜在的性能瓶颈。
- 容量规划:根据业务增长趋势,提前规划资源,确保系统能够应对未来的负载增长。
