EC2实例异常离线求助:运行状态下无法访问
排查网络与端口状态
登录实例执行netstat -tulpn,确认Node.js应用的端口是否处于监听状态。同时从VPC内其他实例执行telnet <目标EC2 IP> <应用端口>,测试内部连通性——如果内部通公网不通,检查安全组、NACL规则是否有隐性变更;如果内部也不通,基本是实例自身的网络栈或应用进程问题。检查Node.js应用状态
查看应用日志(比如PM2日志pm2 logs,或Node.js输出的日志文件),排查是否存在内存泄漏、未捕获异常导致进程僵死。配置进程守护工具(PM2或systemd),设置自动重启规则,比如PM2可通过pm2 startup设置开机自启,配合pm2 monit监控进程状态,一旦进程无响应自动重启并记录崩溃日志。排查系统层面异常
查看系统日志/var/log/messages(CentOS)或/var/log/syslog(Ubuntu),检查是否有内核报错、OOM Killer触发、磁盘IO异常等记录。如果连SSH都无法连接,启用AWS的EC2串行控制台,查看实例内部的实时系统输出,定位是否是系统死锁或网络栈崩溃。验证GitHub Action的连接机制
如果GitHub Action用SSH连接,执行systemctl status sshd确认SSH服务是否正常运行,检查SSH配置文件/etc/ssh/sshd_config是否有变更导致连接失败。如果用AWS Session Manager,执行systemctl status amazon-ssm-agent确认SSM Agent是否在运行——SSM Agent离线会导致GitHub Action无法连接,但EC2控制台仍显示实例处于运行状态。排查定时任务与第三方进程
执行crontab -l查看实例上的定时任务,确认是否有自动更新、清理脚本在执行时干扰了网络或应用进程。同时用top或htop监控后台进程,排查是否有其他进程占用关键资源或端口。
内容的提问来源于stack exchange,提问作者Shanta Miah

