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

AWS EC2实例不可访问故障求助(搭载Rails、Phusion Passenger)

故障1:实例偶发无法SSH连接、应用无法访问,仅重启实例可恢复

可能诱因

  • 实例资源完全耗尽:如果使用的是AWS T系列突发型实例,CPU积分耗尽后会被强制限流到极低水平,系统完全无法响应任何请求;也可能是内存/IO资源打满,swap配置不合理(比如swappiness值过低、swap空间不足、swap挂载在实例临时存储上随负载异常失效),导致内核无响应
  • EC2底层异常:实例所在宿主机硬件故障,或者实例网络栈崩溃,触发EC2实例状态检查失败
  • 内核缺陷:当前运行的AWS定制内核存在内存泄漏bug,长时间运行后内核态内存占满,无法处理任何系统调用

解决方案

  • 先通过CloudWatch查看故障时间点的监控数据:CPU利用率、CPU积分使用量(T系列实例)、网络吞吐、磁盘IO,已安装CloudWatch Agent的可直接查看内存/swap占用情况,先定位根因
  • 若为T系列实例积分耗尽问题,可切换为C/M系列通用计算实例,或开启实例无限积分模式
  • 调整swap配置:执行sysctl -w vm.swappiness=10,并将配置写入/etc/sysctl.conf永久生效;swap空间分配为物理内存的1~2倍,确保swap挂载在持久化EBS卷上
  • 升级实例内核到AWS官方最新稳定版本,安装oomd服务提前终止异常高内存占用进程,避免系统完全卡死
  • 配置CloudWatch告警,触发实例状态检查失败、CPU利用率持续100%超过5分钟等规则时,自动执行实例重启操作

故障2:Rails应用自动停止,application/current目录被删除,需重新部署恢复

可能诱因

  • 部署脚本逻辑异常:如果使用Capistrano类部署工具,current是指向最新版本的软链接,部署过程中失败回滚逻辑有bug、旧版本清理规则错误,都会导致current软链接被误删且未重建
  • 定时清理任务配置错误:系统层面的定时清理脚本(比如tmp清理、日志轮转脚本)规则匹配范围过大,误将应用目录下的内容判定为临时文件清理
  • 目录权限配置不当:Apache/Passenger运行用户对应用根目录有写入权限,进程异常时误删目录内容
  • 服务器被入侵,恶意脚本执行了目录删除操作

解决方案

  • 排查部署脚本逻辑:重点检查旧版本清理规则、部署失败回滚钩子的代码,测试异常部署场景下的回滚逻辑是否正常,确保不会误删current链接
  • 遍历所有定时任务:执行crontab -l查看用户定时任务,检查/etc/cron.d/、/etc/cron.hourly/等系统定时任务目录下的所有脚本,确认清理规则仅作用于/tmp、应用tmp、应用log等目录,不会匹配应用根目录
  • 收紧应用目录权限:将application根目录权限设置为755,所有者设为专用的部署用户,仅给tmp、log、public/uploads等需要写入的目录开放Apache/Passenger运行用户的写入权限,根目录禁止写入
  • 配置目录变更审计:安装inotify-tools,监控application目录的删除操作,记录删除动作对应的进程ID和执行用户,快速定位异常来源
  • 配置自动恢复规则:检测到current目录不存在时自动触发部署流程,降低故障影响时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:03