网络延迟高连不上服务器?这些排查方法你得会

早上刚到公司,咖啡还没喝上一口,客户电话就打过来了:‘你们系统又打不开了!’登录后台一看,接口响应时间飙到好几秒,甚至直接超时。这种“网络延迟高连不上服务器”的问题,运维人几乎每周都会碰上一回。

先别急着重启

很多人第一反应是重启服务或者换台服务器,但这往往治标不治本。得一步步查清楚到底是哪一环出了问题。可以先用最基础的 ping 命令试试:

ping your-server-ip

如果发现丢包严重,或者延迟动不动就几百毫秒,那问题大概率出在网络链路上,而不是服务本身。

从本地到服务器,路径得捋一遍

有时候你这边网络正常,但数据包在中途某个节点卡住了。这时候就得用 traceroute(Windows 下是 tracert)来看路径:

traceroute your-server-ip

你会看到每一跳的延迟情况。如果某一级突然延迟飙升,甚至显示星号(* * *),说明那个节点可能出现了拥塞或防火墙拦截。这种情况常见于跨运营商访问,比如你用的是电信,服务器在联通机房。

DNS 解析也可能拖后腿

别小看 DNS,有时候域名解析慢,会让你误以为是服务器连不上。可以用 dignslookup 测一下解析时间:

dig example.com

如果响应超过几百毫秒,考虑换个公共 DNS,比如 8.8.8.8 或者 114.114.114.114,再试一次。

服务器本身是不是扛不住了?

也有可能是服务器资源见底了。CPU 跑满、内存爆掉、磁盘 I/O 堵塞,都会导致响应变慢甚至拒绝连接。登录服务器看看负载:

top

或者用 htop 更直观地查看进程占用。如果发现某个进程吃光了 CPU,就得顺藤摸瓜查日志,看是不是有异常请求或者死循环。

防火墙和安全组别忽略

有时候改完配置一切正常,可隔天又连不上了。可能是防火墙规则变动,或者是云平台的安全组策略限制了新 IP。阿里云、腾讯云这些平台,默认安全组经常只放行部分端口。确认一下你的访问端口有没有被拦住。

换个地方试试

如果你在办公室连不上,但用手机热点却能访问,那问题肯定出在本地网络。可能是公司出口带宽被占满,或者路由器设置了限流。让同事在不同地点测一下,能快速缩小排查范围。

别忘了应用层的问题

网络通,延迟低,但还是连不上?那可能是应用没起来。比如 Web 服务崩了,端口没监听。用这条命令看看:

netstat -tulnp | grep :80

如果没输出,说明服务根本没启动,或者监听错了 IP。这时候就得去查服务日志,比如 Nginx 的 error.log,或者 systemctl status 看状态。

小技巧:用 curl 测真实响应时间

想看完整请求耗时?用 curl 加上时间参数:

curl -o /dev/null -s -w 'DNS: %{time_namelookup} Connect: %{time_connect} Start: %{time_starttransfer} Total: %{time_total}\n' http://your-server.com

这一行能告诉你 DNS 花了多久、TCP 连接建立时间、首字节返回时间和总耗时,比单纯 ping 有用多了。

最后别忽视物理链路

去年我们有个项目一直连不上海外服务器,各种排查都正常,最后发现是国内到那边的国际线路临时中断。运营商公告说海底光缆故障,修了两天才恢复。这种时候只能等,或者临时切到 CDN 或国内镜像。

网络问题千奇百怪,但只要一步步顺着链条查下去,总能找到病灶。与其慌乱重启,不如冷静分析每一步发生了什么。