Linux 网络排查入门:ping、curl 与 ss
网站打不开,服务连不上,第一反应往往是重启服务器。
但重启之前先问一句:到底是哪一段路断了。
网络排查就三个动作:ping 看通不通,curl 看服务回不回话,ss 看端口有没有在听。学会这三步,断网先定位,再决定修哪一段。
小节一、ping:先看通不通
连不上先确认路通不通,ping 就是干这个的:
ping -c 4 8.8.8.8
这行命令往目标发 4 个探测包。重点看两点:有没有回复,以及往返用了多少毫秒。4 个全回来了,说明到目标的路是通的;全丢了,先别急着怪服务,可能是这段路本身就不通。
只看通不通还不够,丢包率也很关键:
ping -c 10 8.8.8.8
发 10 个包,看丢了几个。丢一两个可能是网络抖动,丢一半以上,说明链路本身不稳,这时候修服务没用,先解决网络质量问题。
ping 不通域名时,换 IP 再试一次:
ping -c 4 1.1.1.1
IP 通、域名不通,问题多半出在域名解析上,不是服务器挂了。反过来 IP 也不通,再往上查本机网络和路由。
小节二、curl:看服务回不回话
路通了,不等于服务在干活。curl 是直接跟服务对话:
curl -I http://localhost:8080
这行只取响应头,不下载正文。看到 200,说明服务活着并且正常应答;看到 502、503,说明前面的代理或网关到了,但后面的服务没接住;一直超时,说明请求根本没到服务那里。
想看服务返回的正文长什么样,去掉 -I 就行:
curl http://localhost:8080
正文直接打出来,能一眼看出返回的是正常页面,还是报错页。排障时先看状态码,再看正文,比盯着浏览器转圈有用得多。
只关心快慢,不关心内容,可以只计时:
curl -o /dev/null -s -w %{time_total} http://localhost:8080
这行把正文丢掉,只打印总耗时。耗时突然从零点几秒变成几秒,说明服务变慢了,或者中间某段路变堵了,先记下这个数字,再去查是哪一段拖了后腿。
小节三、ss:看端口有没有在听
服务起没起、端口开没开,ss 一眼就能看出来:
ss -tlnp
这行列出所有正在监听的 TCP 端口。重点看两列:Local Address 是监听的地址和端口,Process 是哪个进程在守这个端口。服务明明启动了,端口列表里却没有它,说明它根本没把端口打开,客户端当然连不上。
只关心某一个端口,可以直接点名过滤:
ss -tlnp | grep 8080
这行是在监听列表里只找 8080 端口。找到了,说明服务在听;找不到,服务要么没启动,要么绑错了端口,先对配置再重启。
想看当前有哪些连接正在进行,换一种写法:
ss -tn state established
这样只列出已经建立的连接。连接数突然暴涨,可能是有人在刷请求;连接数是零,说明根本没人连进来,问题在更前面。
小节四、三个新手常踩的坑
第一,ping 不通就断定服务器挂了。很多服务器会禁 ping,ping 不通不等于服务死了,先用 curl 试试服务端口,别被一个禁掉的探测包带偏。
第二,curl 报错就怪服务。先分清报错发生在哪一步:域名解析失败是 DNS 的问题,连接超时是路的问题,502 是网关后面的问题。报错信息里写的是哪一段,就先查哪一段。
第三,端口查到了就以为万事大吉。端口在听,不等于服务能正常应答。ss 只能证明门开着,curl 才能证明门里有人干活,两个都查过才算闭环。
ping 看通不通,curl 看服务回不回话,ss 看端口有没有在听,三步走完,断网先定位到哪一段,再决定修哪一段。服务器下次再连不上,先花一分钟跑这三个命令,再决定是重启、改配置,还是等网络自己恢复。
- 点赞
- 收藏
- 关注作者
评论(0)