1.
故障排查前的准备与信息收集
步骤1:确认故障范围:是单机故障、同一机房多个实例,还是全网问题。
步骤2:收集基本信息:VPS提供商(如AWS/阿里/其他美服厂商)、公网IP、内网IP、最近改动(系统升级、配置变更、部署时间)。
步骤3:准备远程登录凭证:确保能通过SSH登录(私钥、用户名、端口),并在控制台保留控制台访问或重装快照权限。
2.
第一层:主机可达性检查(从本地到VPS)
步骤1:从本地终端执行 ping
,判断是否有ICMP响应。若被阻止,尝试traceroute 或 tracert(Windows)查看路由跳数。
步骤2:使用 telnet 或 curl -v http://: 测试特定端口连通性。
步骤3:登录云厂商控制台查看实例状态、网络ACL、安全组是否误配置或触发DDoS保护。
3.
第二层:DNS与域名解析检查
步骤1:本地和VPS上分别执行 dig +short 域名 和 nslookup 域名,确认解析到正确IP。
步骤2:检查 /etc/resolv.conf、cloud-init 或 DNS缓存(systemd-resolve --status)。如使用CDN,确认回源IP正确。
步骤3:若域名解析不一致,检查DNS主机记录、TTL并进行flush(例如 Windows: ipconfig /flushdns;BIND: rndc flush)。
4.
第三层:防火墙与端口策略检查
步骤1:在VPS上执行 ss -tulpn 或 netstat -tulpn 检查服务监听端口。确认服务是否绑定到0.0.0.0或指定IP。
步骤2:检查iptables/ufw规则:sudo iptables -L -n -v 或 sudo ufw status verbose;云安全组检查入/出方向规则。
步骤3:如端口被阻止,临时放通(示例:sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT),测试成功后持久化规则或通过控制台调整安全组。
5.
第四层:链路与带宽、MTU问题排查
步骤1:使用 traceroute -n 或 mtr 定位中间跳点延迟或丢包。
步骤2:使用 iperf3(在另一台可达机器上)做带宽测试:iperf3 -s(服务端)和 iperf3 -c (客户端)查看吞吐。
步骤3:检查MTU问题(如VPN/隧道导致分片):ping -M do -s 逐步减小size确认最大不分片值;调整接口mtu:sudo ip link set dev eth0 mtu 1400。
6.
第五层:主机资源与性能检查
步骤1:查看CPU/内存:top 或 htop,free -m,确认是否高负载或OOM。
步骤2:检查磁盘与inode:df -h,df -i,若磁盘满可能导致服务异常;查看 /var/log/ 下日志是否被截断。
步骤3:IO 性能检查:iostat -x 1 3 或 ioping /path,若IO等待高考虑扩容或迁移到更高性能磁盘。
7.
第六层:系统与服务日志检查(定位服务崩溃原因)
步骤1:使用 systemctl status 查看服务状态,例如 systemctl status nginx 或 systemctl status mysqld。
步骤2:查看服务日志:journalctl -u -n 200 --no-pager,或 tail -n 200 /var/log/nginx/error.log,/var/log/mysql/error.log。
步骤3:查看内核日志与OOM:dmesg | tail -n 100 或 dmesg | grep -i oom,若发现OOM杀死进程,需调整内存或OOM策略。
8.
第七层:应用层功能检查与端到端测试
步骤1:用 curl -I / curl -v 请求应用接口,查看HTTP状态码、响应头、重定向链。
步骤2:数据库连通性检查:在VPS上执行 mysql -u user -p -h 127.0.0.1 -P 3306 -e "SELECT 1;",或使用 redis-cli ping。
步骤3:若应用异常,查看应用日志(例如 PHP-FPM: /var/log/php-fpm/www-error.log),重启进程并观察日志:sudo systemctl restart php-fpm && journalctl -u php-fpm -f。
9.
第八层:抓包与深度分析工具使用
步骤1:使用 ss -s / netstat -s 查看TCP连接状态统计,定位大量TIME_WAIT或SYN_RECV情形。
步骤2:使用 tcpdump 抓包定位问题(示例:sudo tcpdump -i eth0 host and port 80 -w /tmp/capture.pcap),将pcap下载并用Wireshark分析。
步骤3:用 lsof -i : 查看哪个进程占用端口,必要时临时调整参数或kill重启服务。
10.
第九层:恢复、回滚与防护建议
步骤1:若变更引起故障,快速回滚到上一个已知良好快照或部署版本,并记录变更时间与影响。
步骤2:建立临时缓解措施:限流、临时扩容、添加只读副本或使用维护页面,保证核心服务可用。
步骤3:事后分析并写故障单(Root Cause Analysis),补充监控告警(CPU、内存、磁盘、网络、错误率)、自动化脚本与Runbook。
11.
问:如果无法通过SSH登录该如何排查VPS网络问题?
答:第一步在云厂商控制台使用内置串口/VNC控制台查看系统启动与网络配置(/etc/network/interfaces、/etc/netplan或cloud-init日志)。第二步检查云安全组和路由表是否误配置;第三步如果控制台无法操作,尝试恢复到快照启动备用实例挂载磁盘检查配置,或联系厂商支持。
12.
问:遇到高并发导致服务短时间不可用,如何临时缓解并优化?
答:临时缓解可通过增加实例数量(水平扩展)、启用负载均衡、配置后端限流和缓存(如Nginx缓存、Redis缓存)、在应用端使用熔断/降级策略。长期优化包括优化数据库索引、查询、连接池配置、调整内核TCP参数(如 somaxconn、tcp_tw_reuse)、以及做压测验证。
13.
问:如何建立一个日常排查的最小化检查清单?
答:建议清单:1) 能否ping通/trace路由;2) DNS是否正确解析;3) 端口是否开放(ss/netstat);4) 服务是否运行(systemctl/status);5) 主机资源(CPU/内存/磁盘);6) 近期日志(journalctl/tail);7) 简单curl接口测试;8) 检查云安全组与控制台状态。按此顺序快速定位常见问题并记录结果。
来源:美国vps日常故障排查从网络到应用的分层检查流程