You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EC2实例CPU使用率突发升至99% 如何定位异常进程

针对该场景的定位方案

EC2实例本身没有内置的、重启后即可生效的专门用来定位高CPU进程的官方开关,但你可以在Ubuntu系统层面配置开机自启的监控规则,实例重启后相关监控会自动运行,无需手动操作就能捕捉突发高CPU的进程数据。

1. 轻量历史性能采集配置

推荐使用Ubuntu官方源自带的sysstat工具,可长期记录进程资源占用的历史数据:

  • 安装工具:sudo apt install sysstat
  • 开启开机自启采集:修改/etc/default/sysstat文件,将ENABLED="false"改为ENABLED="true"
  • 调整采集间隔为1分钟(默认10分钟,更容易捕捉突发问题):修改/etc/cron.d/sysstat中的规则,把*/10 * * * * root /usr/lib/sa/sa1 1 1改为*/1 * * * * root /usr/lib/sa/sa1 1 1
  • 重启服务生效:sudo systemctl restart sysstat
  • 问题回溯方法:出问题后执行sar -u -f /var/log/sysstat/saXX(XX为对应日期的数字),即可查看过去任意时段的进程CPU占用排行,哪怕你当时没有连接实例也能查到历史数据。

2. 高CPU触发自动快照配置

你可以写一个简单的后台监控脚本,配置开机自启,检测到CPU使用率超过阈值时自动记录当时的进程排行:

  1. 新建脚本文件/usr/local/bin/cpu_monitor.sh,内容如下:
#!/bin/bash
while true; do
    CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')
    if (( $(echo "$CPU_USAGE > 90" | bc -l) )); then
        echo "=== CPU high at $(date) ===" >> /var/log/cpu_high.log
        ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -20 >> /var/log/cpu_high.log
        echo "=== End of snapshot ===" >> /var/log/cpu_high.log
        sleep 60
    fi
    sleep 10
done
  1. 赋予执行权限:chmod +x /usr/local/bin/cpu_monitor.sh
  2. 配置开机自启:在/etc/rc.local文件的exit 0行之前添加/usr/local/bin/cpu_monitor.sh &,实例重启后脚本会自动后台运行,问题发生后直接查看/var/log/cpu_high.log即可拿到异常进程信息。

3. 额外排查提示

  • t2系列实例采用CPU积分机制,可先在EC2控制台监控页查看CPUCreditBalance指标,如果指标降到0,说明是CPU积分耗尽导致的实例性能受限,不属于进程占用过高的问题,需要优化服务配置或升级实例规格。
  • Spring Boot服务可以在启动参数中添加GC日志打印配置,排查是否是内存不足触发频繁Full GC导致的CPU飙高。
  • MySQL、Mongo可以开启慢查询日志,排查是否是数小时后触发的大量慢查询占满CPU。

内容的提问来源于stack exchange,提问作者Kumar Gaurav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:36:01