Linux实例CPU使用率或负载较高问题的排查与处理

问题现象

CPU使用率或负载过高时,常见的现象包括:

  1. 业务服务异常

    • SSH远程连接响应缓慢、操作卡顿,严重时无法建立连接。

    • 网站或应用程序响应时间显著增加,页面加载缓慢。

    • 请求频繁超时、接口返回失败,业务处理能力明显下降。

  2. 系统资源异常

    • 实例CPU使用率持续高于80%,甚至接近100%。

    • 系统负载(Load Average)持续超过CPU逻辑核数(如4核机器Load > 4)。

    • 云监控平台已触发高负载相关告警(短信/邮件通知)。

问题原因

  • 高计算消耗进程 :代码逻辑问题(如死循环)、复杂的计算任务或高并发业务请求导致特定进程占用大量CPU资源。

  • I/O性能瓶颈 :磁盘读写频繁或存储性能不足,导致进程长时间处于等待I/O,从而推高系统平均负载。

  • 内核或系统调用 :频繁的上下文切换、内核任务或驱动程序异常导致系统态CPU使用率升高。

  • 异常或恶意程序 :实例被植入挖矿程序、木马病毒,或存在Rootkit隐藏进程,消耗大量计算资源。

解决方案

首先通过top工具定位导致CPU升高或负载过高的具体指标(用户态、内核态或I/O等待),然后根据指标类型使用perfiotopvmstat等工具深入分析,最后采取相应措施进行优化或处理。

步骤一:定位CPU瓶颈指标

  1. 通过VNC连接登录ECS实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过VNC远程连接。输入账号和密码,登录ECS实例。

  2. 查看系统负载和进程活动。

    sudo top
  3. 定位问题原因。

    top交互界面按P键,按CPU使用率降序排列进程,识别出消耗最高的进程ID(PID)和进程名(COMMAND)。

    • 若某个业务进程(如javapythonphp-fpm)CPU使用率持续高于80%,请参考处理业务进程繁忙

    • %Cpu(s)中的I/O等待(wa)持续高于20%,用户态(us)和内核态(sy)都很低,并且平均负载(Load Average)数值远超CPU核数,表明CPU有大量时间在空闲等待磁盘响应,请参考处理磁盘 I/O 瓶颈

      当进程等待磁盘I/O完成时,会进入D状态(不可中断睡眠),此时进程无法被终止。大量D状态进程堆积表明磁盘响应缓慢,导致CPU空闲等待,从而推高系统负载。
    • %Cpu(s)中的sy(system)持续高于30%,通常表示内核频繁执行系统调用或中断处理,请参考处理内核或系统调用繁忙

    • %Cpu(s)中的si(softirq) 持续高于15%,表明网络流量较高,请参考处理网络中断繁忙

步骤二:针对性分析并处理

处理业务进程繁忙

  • 分析并优化代码:

    使用性能分析工具定位热点代码。

    • Java应用 :使用jstack <PID>导出线程栈,搜索处于RUNNABLE状态的线程,观察调用栈是否存在长时间停留在某个特定方法中。

    • C/C++应用 :使用perf top -p <PID>查看具体消耗CPU的函数符号。

    根据分析结果优化算法、修复死循环或减少不必要的计算。

  • 升级资源:若为正常业务增长导致的资源瓶颈,应升级实例规格

处理磁盘 I/O 瓶颈

  1. 定位高I/O进程:处理Linux系统磁盘I/O负载过高问题

  2. 检查是否有D状态进程堆积:

    sudo ps -axjf | grep " D"
  3. 处理措施:

    • 应用优化:降低日志级别、为数据库查询添加索引以减少磁盘读写。

    • 升级存储:可升级云盘类型(如将 ESSD PL1升级至 ESSD PL2/PL3)以提升IOPS和吞吐量,云盘最终IOPS受挂载实例规格限制,若实例规格的IOPS上限低于云盘能力,需升级实例规格

    • 重启系统:若存在D状态进程堆积,可通过重启系统解决。

处理内核或系统调用繁忙

  1. 检查上下文切换:运行vmstat 1命令,观察cs(context switch)列的数值,若数值持续超过 100,000,说明上下文切换过于频繁,需检查应用程序是否存在过多的线程创建/销毁。

  2. 检查内核任务:若 kswapd0 进程占用率高,说明物理内存不足,内核正在频繁进行内存回收,建议升级实例规格

    物理内存不足时,kswapd0频繁扫描页面、执行回收和换出操作,这些计算密集型任务会消耗大量CPU资源,导致使用率升高。

处理网络中断繁忙

  1. 分析流量:使用iftopiptraf-ng等工具分析网络流量来源和类型。

  2. 检查配置:对于高网络负载,可开启网卡多队列将中断分散到多个 CPU 核心。

  3. 安全排查:前往云安全中心,查看是否存在网络攻击。

后续建议

  • 配置监控告警:对CPU使用率、负载、I/O等待等指标设置合理的告警阈值,实现早期预警。若需对 Linux 系统指标进行历史回溯与分析,可使用atop工具监控Linux系统指标

  • 定期安全巡检:利用云安全中心定期对主机进行漏洞扫描病毒查杀基线风险检查,修复潜在安全隐患。

  • 定期审查与优化:定期对系统和应用进行性能审计和代码审查,发现并解决潜在的性能瓶颈。

  • 容量规划:根据业务增长趋势,提前进行容量规划,确保系统资源能够应对未来的负载增长。