AWS EC2故障排查实战:服务器出问题了怎么查

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