Linux实例负载高问题排查和异常处理

问题现象

  • 响应慢:SSH命令执行卡顿,网站或API访问缓慢、超时。

  • 指标高:CPU、内存、磁盘I/O监控持续超过80%。

  • 服务中断:关键进程被系统终止(OOM),实例自动重启。

  • 无法登录:SSH连接被拒绝。

问题原因

  • 程序问题:应用代码存在性能瓶颈或内存泄漏。

  • 流量突增:并发访问超出实例处理能力。

  • I/O瓶颈:磁盘读写达到饱和,CPU大量等待(iowait高)。

解决方案

步骤一:使用htop快速定位异常进程

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

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

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

  2. 安装并运行htop。

    sudo yum install -y htop
    htop
  3. htop界面中分析。

    • CPU消耗高的进程:按F6键,选择PERCENT_CPU降序排序。

    • 找内存消耗高的进程:按F6键,选择PERCENT_MEM降序排序。

步骤二:使用sar工具全面诊断资源瓶颈

htop定位到现象后,使用sar获取量化数据,确认瓶颈是CPU、内存还是I/O。

  1. 安装并启用sysstat。

    sudo yum install -y sysstat
    systemctl start sysstat && systemctl enable sysstat
  2. 执行专项分析。

    • 分析CPU(sar -u):确认CPU时间花费在哪。

      # 每秒采集1次,共采集5次
      sar -u 1 5
      • %user高:应用程序问题。

      • %system高:内核或I/O调用频繁。

      • %iowait持续大于20%:瓶颈在磁盘I/O。

    • 分析系统负载(sar -q)衡量系统繁忙程度。

      # 每2秒采集1次,共采集5次
      sar -q 2 5
      • ldavg-1大于CPU核心数:系统已过载。

      • runq-sz高:较多进程在排队等待CPU。

    • 分析内存与交换(sar -r 和 sar -W):判断内存是否耗尽。

      # 分析内存使用
      sar -r 1 3
      # 分析交换活动(Swap)
      sar -W 1 3
      • pswpin/spswpout/s持续大于0:物理内存不足,系统正在使用硬盘作虚拟内存,性能会下降。

    • 分析磁盘I/O(sar -d):定位磁盘性能瓶颈。

      # 每秒采集1次,共采集3次,分析具体磁盘
      sar -d 1 3
      • %util接近100%:磁盘I/O已饱和。

      • await大于20ms:I/O请求处理时间过长。

步骤三:针对性处理与优化

  • CPU消耗的业务进程:

    • 代码优化:使用perf(C/C++),jstack(Java)等工具定位并优化热点代码。

    • 逻辑优化:检查并修复死循环、全表扫描SQL等低效操作。

  • 内存不足或频繁Swap:

    • 排查泄漏:使用valgrind(C/C++),jmap(Java)等工具分析内存泄漏。

    • 调整配置:合理配置应用的内存参数,如JVM-Xms-Xmx

    • 升级资源:升降配方式概述以增加物理内存。

  • 高磁盘I/O:Linux系统磁盘I/O负载较高问题的排查与处理

后续建议

  • 配置监控告警:为CPU、内存、负载、磁盘等关键指标设置告警阈值,实现早期预警。

  • 规划弹性伸缩:对Web应用等波动性负载,配置弹性伸缩策略,自动增减实例以应对流量变化。