1.
概述:线路故障与服务器故障的典型表现
- 线路故障通常表现为高丢包(>1%)、抖动增大、跨多个目标延迟突增或完全连不上,但控制台仍可远程登录(若管理网不受影响)。
- 服务器故障常见为单机CPU飙高、内存耗尽、磁盘IO阻塞、进程异常退出或服务端口不可达,但底层链路延迟正常。
- 判断要点:是否影响所有外部链路、是否影响同机多个服务、是否存在带宽饱和(例如接口流量>带宽80%)。
- 常用工具:ping、traceroute、mtr、tcpdump、netstat、top、iostat、dmesg、webserver日志。
- 定义阈值示例:区域内延迟HK<-->CN常见在20-50ms;丢包>2%需警报;iowait>20%说明磁盘瓶颈。
2.
初步判断步骤(第一分钟到十分钟)
- 1分钟内用ping测试:ping -c 20 your.ip.or.domain,记录丢包率与平均延迟;丢包>2%优先怀疑链路。
- 使用traceroute或mtr确认跃点:traceroute -n your.ip,若跳跃在同一上游ISP处出现大量丢包,说明链路。
- 检查机房BGP/上游通告与NOC告警:有无上游链路事件通告或路由flap。
- 远程主机登录检查:ssh登录是否可达,若能登录但服务不可用,偏向应用/服务器问题。
- 同机内核日志快速看:dmesg | tail -n 50,检查是否有硬盘报错、内存错误(OOM)或网卡重置记录。
3.
主机层面深入检查(5到30分钟)
- CPU/内存/负载:top 或 vmstat 1 5,LoadAvg 对比 vCPU 数量,4 vCPU 若 LoadAvg > 4 持续,应怀疑CPU饱和或线程阻塞。
- 磁盘IO:iostat -x 1 3,若 %iowait>20% 或 avgqu-sz 很高,可能是磁盘瓶颈导致服务响应慢。
- 连接与端口:netstat -anp | grep :80 查看 TIME_WAIT、SYN_RECV 数量,SYN_RECV 大量表示可能被 SYN 洪泛。
- 日志排查:/var/log/nginx/error.log、/var/log/messages、应用日志按时间线过滤错误(例如 500、504)。
- 进程检查:ps aux --sort=-%mem|-cpu,确定是否有单进程占用过高(如 PHP-FPM 子进程崩溃或线程泄漏)。
4.
网络层面与数据示例(带表格展示)
- 使用 MTR 长时间测试:mtr -rwzbc 100 目标IP,关注丢包位置与平均延迟。
- tcpdump 抓包定位:tcpdump -i eth0 host 目标IP and port 80 -c 1000,分析是否有重复重传/丢包/MTU问题。
- 带宽监控:ifstat 或 vnstat 查看瞬时流量,若接口流量接近1Gbps带宽上限且持续,优先怀疑链路带宽饱和。
- 下表为一次典型诊断快照(样例数据,单位ms/百分比/Mbps):
| 项目 | 样例数值 |
| ping 平均延迟 | 28 ms |
| ping 丢包率 | 0.5 % |
| MTR 跳点丢包(上游) | 12 %(第4跳) |
| 接口入/出带宽 | 峰值 720 Mbps |
| 服务器负载(4 vCPU) | LoadAvg: 1.2, CPU 35 % |
- 解释:上述样例显示上游第4跳丢包高,接口带宽未饱和且本机负载正常,倾向线路问题。
5.
服务器配置与可导致误判的场景
- 示例主机配置:VPS(香港机房)——4 vCPU, 8GB RAM, 200GB NVMe, 1Gbps 公网端口;操作系统:Ubuntu 22.04;Nginx 1.24。
- Nginx 常见误配置:worker_connections 太低(如1024),在高并发下导致 502/504,应调到 65535 并检查 ulimit。
- 数据实例:在 10k 并发情况下,连接数峰值 12000,如 worker_connections=1024 会出现大量拒绝,表现为“服务器不可达”。
- TCP 参数:net.ipv4.tcp_tw_reuse=1、tcp_fin_timeout 降低可缓解 TIME_WAIT 累积,避免误判为链路问题。
- 磁盘问题误判:磁盘挂载延迟或 SMART 错误会使数据库响应超时,表现为应用超时但网络层正常。
6.
CDN、DDoS 与上游影响的区分方法
- 若使用 CDN,先绕过 CDN 直接访问源站 IP:若源站可达而 CDN 节点异常,问题在CDN或其与上游的链路。
- DDoS 指标:pps(包/秒)异常、带宽接近端口上限、SYN/UDP 洪泛;网卡统计、sflow/NetFlow 能发现源地址分布。
- 防护判断:如果 netstat 显示大量 SYN_RECV 且来源分散,配合流量尖峰(例如 600Mbps+ 持续),多为 DDoS/链路被洪泛。
- 上游问题:检查 BGP 路由、是否有缜密的路由变更或黑洞策略,被运营商做了清洗或断路。
- 处置建议:临时使用清洗服务、调整 ACL、启用 CDN 缓存、联系机房NOC核查上游链路。
7.
真实案例与修复流程(示例)
- 案例简介:某电商
香港机房 2025-03-12 上午 10:05 报警,用户访问大量 504 超时。
- 诊断步骤:1) ping 目标 IP 丢包 15%;2) mtr 指向第5跳丢包严重;3) 登录源站 CPU/内存正常,Nginx 连接数正常;4) ifstat 峰值流量 80 Mbps(带宽 500Mbps),非饱和。
- 根因:机房上游骨干在第5跳发生链路故障(光缆切割),导致丢包与路径不稳定。NOC 14:20 报告并确认上游维护。
- 修复过程:与上游联络切换备路由并在机房启用临时 BGP 漂移,15:10 恢复至 <1% 丢包,16:00 业务恢复正常。
- 经验总结:快速区分方法为“网络层丢包定位 + 主机资源检查”,记录好抓包与 mtr 输出以便与机房和运营商沟通。
8.
总结与防范建议
- 日常监控:建议部署 24/7 的 ping/mtr 监控、带宽/连接数告警与主机资源阈值监控(CPU/IO/mem)。
- 预案准备:与机房签订 SLA、备份路由、使用多地区冗余与 CDN 缓存,设置自动切换规则。
- 常用阈值参考:丢包>2%、延迟比基线高50%、iowait>20%、接口利用率>80%触发警报。
- 工具链建议:Prometheus + Grafana 监控、ELK 日志聚合、MTR/tcpdump 自动化脚本保留抓包。
- 最后一条:排查思路先“外—内”即先判定链路(是否广泛受影响)再判定主机(单点资源/日志),并保存证据便于与机房/上游沟通。
来源:如何判断香港机房出问题是线路还是服务器故障