AWS EC2故障排查实战:服务器出问题了怎么查
引言:服务器连不上了怎么办?
EC2是AWS最常用的服务,也是最容易出问题的。有时候是网络不通,有时候是SSH连不上,有时候是网站打不开,有时候是服务器卡得要命。这篇文章帮你理清排查思路,遇到问题不慌。
一、常见故障类型
EC2故障主要分这几类:
连接问题:SSH连不上、网站打不开
性能问题:服务器卡、响应慢、CPU高
磁盘问题:磁盘满了、读写慢
网络问题:丢包、延迟高
实例状态问题:实例停不掉、启动不了
二、排查前的准备
开始排查前,先确认几件事:
实例状态:在EC2控制台看,是“运行中”还是“停止”还是“终止”
状态检查:看“状态检查”那一列,是“通过”还是“失败”
网络信息:记下公网IP、私网IP、安全组、子网
AWS有两个状态检查:
系统状态检查:检查EC2底层硬件,失败说明物理机有问题
实例状态检查:检查操作系统,失败说明系统有问题
三、场景一:SSH连不上
3.1 现象
用SSH连接,一直转圈,或者报错“Connection timed out”、“Connection refused”、“Permission denied”。
3.2 排查步骤
第一步:检查实例状态
在EC2控制台,确认实例是“运行中”。如果状态是“停止”,启动它。
第二步:检查安全组
安全组必须允许SSH(端口22)入站。检查:
入站规则有没有SSH?
来源IP是不是你的公网IP?
如果来源是0.0.0.0/0,至少能通,但不安全
可以用“我的IP”功能自动填你当前的IP。换了网络环境IP会变,要更新。
第三步:检查网络ACL
如果VPC有自定义网络ACL,确认允许SSH入站和出站。
第四步:检查路由表
确认实例所在的子网,路由表有指向Internet网关的默认路由。
第五步:检查公网IP
实例必须有公网IP,或者通过NAT、VPN才能访问。检查:
有没有分配公网IP?
如果实例停止过,公网IP会变,用新的IP连接
第六步:用EC2控制台连接测试
在EC2控制台,选中实例,点击“连接”,选“EC2实例连接”或“Session Manager”。如果能连上,说明实例本身没问题,是网络或安全组的问题。
第七步:检查密钥
如果报“Permission denied”,检查:
密钥对不对?
用户名对不对?Amazon Linux用ec2-user,Ubuntu用ubuntu
密钥权限对不对?Linux/Mac要chmod 400
四、场景二:网站打不开
4.1 现象
浏览器访问IP或域名,转圈、超时、报错。
4.2 排查步骤
第一步:检查Web服务是否运行
SSH进去,执行:
bash
复制下载
# 检查Nginxsudo systemctl status nginx# 检查Apachesudo systemctl status httpd
如果没运行,启动它。
第二步:检查端口监听
bash
复制下载
sudo netstat -tlnp | grep 80
看有没有进程监听80端口。没有的话,Web服务没起来或端口不对。
第三步:检查安全组
安全组必须允许HTTP(80)或HTTPS(443)入站。如果来源是0.0.0.0/0,至少能通。
第四步:本机测试
在EC2上用curl测试:
bash
复制下载
curl http://localhost
如果能返回网页内容,说明Web服务正常,问题在网络层。
第五步:检查防火墙
实例内的防火墙(iptables、firewalld)可能阻止了80端口。检查:
bash
复制下载
# 检查iptablessudo iptables -L# 检查firewalldsudo systemctl status firewalld
第六步:检查负载均衡器
如果用负载均衡器,检查:
目标组健康检查是否通过
监听器配置是否正确
五、场景三:服务器卡、响应慢
5.1 现象
网站响应慢,SSH输入命令半天才回,CPU持续100%。
5.2 排查步骤
第一步:看CPU
SSH进去,执行:
bash
复制下载
top
看哪个进程占用CPU高。如果是正常业务进程,说明需要升级实例。如果是可疑进程(比如挖矿程序),可能是被入侵了。
第二步:看内存
bash
复制下载
free -h
内存满了会导致系统变慢。看哪个进程占用内存高,可能是内存泄漏或配置不足。
第三步:看磁盘IO
bash
复制下载
iostat -x 1
看%util,接近100%说明磁盘忙,可能是读写太频繁,或者磁盘类型太慢。
第四步:看CloudWatch监控
在EC2控制台,看监控标签页的CPU、网络指标,看趋势。
第五步:检查是否有异常进程
bash
复制下载
ps aux | sort -rk 3 | head -20 # CPU最高的20个进程ps aux | sort -rk 4 | head -20 # 内存最高的20个进程
看到不认识的可疑进程,查一下。如果是挖矿程序,立即隔离实例,查入侵原因。
六、场景四:磁盘满了
6.1 现象
写文件报错“No space left on device”,网站不能上传文件。
6.2 排查步骤
第一步:看磁盘使用率
bash
复制下载
df -h
看Use%列,100%就是满了。
第二步:找大文件
bash
复制下载
du -sh /* | sort -rh | head -10
一层层找,看哪个目录最大。常见情况:
/var/log:日志太多
/tmp:临时文件没清理
/home:用户文件太多
第三步:清理日志
bash
复制下载
# 清空日志(不要直接删)sudo truncate -s 0 /var/log/syslog# 用logrotate管理日志sudo logrotate -f /etc/logrotate.conf
第四步:扩容磁盘
如果清理后还不够,可以扩容EBS卷:
在EC2控制台,找到实例的根卷
修改卷大小,比如从20GB改成40GB
进实例,扩展文件系统:
bash
复制下载
# 查看分区lsblk# 扩展分区(如果是xfs)sudo xfs_growfs /# 如果是ext4sudo resize2fs /dev/xvda1
七、场景五:状态检查失败
7.1 现象
EC2控制台显示“2/2检查失败”或“1/2检查失败”。
7.2 排查步骤
系统状态检查失败:硬件问题,比如物理机坏了。AWS会自动恢复,等一会儿。如果长时间没恢复,可以停止并启动实例(会换物理机)。
实例状态检查失败:操作系统问题,比如内核崩溃、文件系统损坏、网络配置错误。
排查方法:
停止实例
把根卷挂载到另一台正常实例
检查系统日志、修复文件系统
修好后再挂回去
八、场景六:实例无法停止或终止
8.1 现象
点“停止”或“终止”,一直转圈,没反应。
8.2 排查步骤
第一步:等一会儿
有时是系统在处理,等5-10分钟。
第二步:强制终止
在AWS CLI执行:
bash
复制下载
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0
第三步:检查是否有依赖
比如实例有开启终止保护的EBS卷,需要先关保护。
第四步:联系AWS支持
如果还是不行,提交工单。
九、快速排查清单
遇到EC2问题,按这个清单快速过一遍:
SSH连不上:
实例状态是“运行中”吗?
安全组允许SSH吗?来源IP对吗?
有公网IP吗?
密钥对吗?权限对吗?
网站打不开:
Web服务在运行吗?
安全组允许HTTP吗?
本机curl能通吗?
防火墙阻止了吗?
服务器卡:
CPU高吗?哪个进程?
内存够吗?
磁盘IO忙吗?
有可疑进程吗?
磁盘满了:
df -h看使用率
找大文件清理
考虑扩容
状态检查失败:
系统状态失败?等自动恢复
实例状态失败?挂载到其他实例修复
十、结语
EC2故障排查不难,关键是系统化。从连接、性能、磁盘、状态这几类入手,一步步查。日志是最好的帮手,平时把日志配置好,问题就好查。多演练,真出问题了不慌。
如果需要更深入咨询了解可以联系全球代理上TG:jinniuge 他们在云平台领域有更专业的知识和建议,他们有国际阿里云,国际腾讯云,国际华为云,aws亚马逊,谷歌云一级代理的渠道,客服1V1服务,支持免实名、免备案、免绑卡。开通即享专属VIP优惠、充值秒到账、官网下单享双重售后支持。不懂找他们就对了。
3 .0
