AWS T2.Medium EC2实例CPU利用率显示不一致及高CPU排查咨询
AWS T2.Medium EC2实例CPU利用率显示不一致及高CPU排查咨询
嗨,我来帮你理清这两个问题,顺便给你一些排查高CPU的实用步骤:
1. 关于实际CPU利用率的疑问
首先得搞清楚AWS控制台和top命令显示数值差异的根源——两者的计算逻辑完全不同:
- AWS控制台的CPU利用率是基于T2实例基准性能的长期平均值。T2.Medium属于突发性能实例,它的基准性能是0.4 vCPU(简单说就是持续可用的CPU能力是总CPU的40%)。你看到的27%,是指过去一段时间里实例平均使用了基准性能的27%,换算成实际物理核心的长期平均使用率大概是2核 × 27% × (0.4/1) ≈ 21.6%,和控制台数值对应得上。
- 而
top命令显示的100%是单个逻辑核心的瞬时使用率。T2.Medium有2个逻辑核心,所以某个进程显示100%,说明它当前把1个核心完全占满了,这属于T2实例允许的突发使用(靠积累的CPU信用支撑),但长期平均下来仍在基准范围内,所以AWS控制台显示的是平稳的27%。
简单总结:你的实际长期CPU使用率是控制台显示的27%(基于基准),top看到的是某个时刻单个核心被占满的瞬时状态。
2. 排查forge进程高CPU的实用方法
因为是Laravel Forge部署的应用,大概率是PHP-FPM进程(Forge默认用PHP-FPM处理PHP请求),可以按以下步骤逐步排查:
- 查看进程线程细节:运行
top -H,找到forge进程对应的PID,展开它的线程列表,看是不是某个特定线程持续占满CPU——这能帮你区分是持续运行的后台任务,还是处理请求的业务线程。 - 跟踪线程CPU变化:用
pidstat -t -p <forge进程PID>,持续观察几分钟,记录下CPU使用率居高不下的线程ID,缩小排查范围。 - 检查PHP-FPM配置:登录Forge面板查看PHP-FPM的配置(比如
pm.max_children、pm.start_servers),如果进程数设置过高,会导致多个进程竞争CPU资源;另外可以开启PHP-FPM慢日志,排查执行时间过长的PHP脚本。 - 排查Laravel应用层面:
- 启用Laravel Debugbar,查看每个请求的执行时间、数据库查询次数,定位是否存在接口有大量重复查询、复杂计算或无效循环逻辑。
- 检查Laravel定时任务(Schedule),看有没有批量任务(比如数据同步、报表生成)在持续占用CPU,尤其要确认任务是否正常退出,有没有后台残留的僵尸进程。
- 跟踪系统调用:用
strace -p <forge进程PID>,观察进程频繁调用的系统函数,如果是一直在做文件IO、重复网络请求或循环调用某个函数,就能快速定位问题点。 - 分析请求日志:打开Nginx的访问日志,排查是否有大量重复请求打到同一个接口,或是爬虫、恶意请求持续触发PHP-FPM进程。
- 换用更直观的监控工具:安装
htop(sudo apt install htop),它能清晰展示每个核心的使用率、进程内存占用及状态(运行/休眠等),比top更易读。
备注:内容来源于stack exchange,提问作者Angom
相关产品推荐
相关产品推荐

