服務(wù)器網(wǎng)絡(luò)出問(wèn)題怎么辦?六大網(wǎng)絡(luò)故障場(chǎng)景排查技巧輕松拿捏
今天分享一下Linux網(wǎng)絡(luò)排查的常見(jiàn)故障場(chǎng)景及使用的命令工具。
當(dāng)你的服務(wù)器連不上、接口報(bào)錯(cuò)、頁(yè)面加載慢、端口打不開(kāi)……你可能第一時(shí)間會(huì)問(wèn):
“到底哪出了問(wèn)題?”
別慌!看看下面6 大常見(jiàn)網(wǎng)絡(luò)故障場(chǎng)景,告訴你如何用 Linux 命令快速定位問(wèn)題、高效排查故障!
本文只講服務(wù)器網(wǎng)絡(luò)排查思路,不講網(wǎng)絡(luò)設(shè)備排查,那是網(wǎng)工的活。
1. 服務(wù)器訪問(wèn)不了公網(wǎng)了
(1) 現(xiàn)象
- ping www.baidu.com 無(wú)響應(yīng)
- curl 報(bào)錯(cuò) Could not resolve host
(2) 排查命令
ip a # 查看是否有 IP 地址
ip route # 查看是否有默認(rèn)網(wǎng)關(guān)
ping 8.8.8.8 # 判斷是否能 ping 通外網(wǎng) IP
cat /etc/resolv.conf # 檢查 DNS 設(shè)置
(3) 分析指引
- ip a 看到?jīng)]有 IP?網(wǎng)卡可能沒(méi)啟用,重啟下網(wǎng)卡
- ping IP 通但域名不通 → DNS 問(wèn)題,檢查 /etc/resolv.conf 或使用 dig
- DNS 服務(wù)器寫(xiě)成內(nèi)網(wǎng)地址卻沒(méi)服務(wù)?改成 8.8.8.8 試試!
也有可能內(nèi)網(wǎng)環(huán)境限制訪問(wèn),這些命令都沒(méi)用,趕緊找網(wǎng)絡(luò)工程師,他干的。
2. 服務(wù)正常但連不上
(1) 現(xiàn)象
- 網(wǎng)頁(yè)/接口請(qǐng)求超時(shí)
- 程序無(wú)法連接到某端口
(2) 排查命令
netstat -lntup # 檢查服務(wù)是否監(jiān)聽(tīng)端口,或者用ss
netstat -lntup | grep 8080 # 查是否是你要的程序
iptables -L -n # 檢查是否被防火墻擋了
firewall-cmd --list-all # 如果防火墻是firewalld就用這個(gè),ubuntu使用ufw做防火墻
telnet localhost 8080 # 測(cè)試本地端口,如果通再?gòu)钠渌?wù)器測(cè)試該端口
(3) 分析指引
- 服務(wù)沒(méi)監(jiān)聽(tīng)端口?程序沒(méi)起來(lái) or 配置錯(cuò)誤
- 監(jiān)聽(tīng) 127.0.0.1 但別人訪問(wèn)不了?改為監(jiān)聽(tīng) 0.0.0.0
- 防火墻攔了?記得 firewalld-cmd 或 ufw 檢查,還有云服務(wù)器的安全組
都沒(méi)啥問(wèn)題,那就重啟,最后大殺招
3. 同一局域網(wǎng)不能互 ping
(1) 現(xiàn)象
- A ping B 不通,但 B 能 ping 網(wǎng)關(guān)
- 內(nèi)網(wǎng)通信失敗
(2) 排查命令
ip a # 查看IP
ip route # 查看路由
ping <對(duì)方 IP> # 互ping
arp -a # 看看ARP緩存
tcpdump -i eth0 icmp # 抓到看看
cat /etc/hosts.deny # 查看是否被限制訪問(wèn)
(3) 分析指引
- 子網(wǎng)掩碼錯(cuò)了 → 路由計(jì)算出錯(cuò)
- 查看 ARP 緩存確認(rèn)是否解析了 MAC
- 抓包看有沒(méi)有 ICMP 請(qǐng)求發(fā)出或回應(yīng)(tcpdump)
- hosts.deny文件也有可能攔截
還有就是網(wǎng)絡(luò)工程師禁ping了,怎么排查都沒(méi)用,找他,甩鍋技能得用上。
4. 網(wǎng)站訪問(wèn)慢,頻繁卡頓
(1) 現(xiàn)象
- 用戶(hù)頻繁反饋網(wǎng)站慢、響應(yīng)慢
- 日志報(bào) 504 Gateway Timeout
(2) 排查命令
ping www.lige.com -c 4 # 先ping一下,測(cè)試連通性
traceroute www.liege.com # 跟蹤路由,看看經(jīng)過(guò)哪些設(shè)備
curl -w "@curl-format.txt" -o /dev/null -s http://your_site # curl檢測(cè)
netstat -antp | grep ESTABLISHED | wc -l
curl-format.txt 可以打印請(qǐng)求耗時(shí)詳情(TTFB、連接時(shí)間等)。
(3) 分析指引
- ping 很高延遲?線路問(wèn)題
- traceroute 某一跳延遲高/超時(shí)?網(wǎng)絡(luò)瓶頸點(diǎn)
- curl 看的是 DNS → 連接 → 首包時(shí)間
終極殺招,重啟服務(wù)看看效果,不行找開(kāi)發(fā)優(yōu)化。
5. 服務(wù)監(jiān)聽(tīng)正常,但外部訪問(wèn)不了!
(1) 現(xiàn)象
- 服務(wù)正常監(jiān)聽(tīng),但別人訪問(wèn)不了
- curl localhost OK,但 curl 公網(wǎng) IP 不通
(2) 排查命令
netstat -lntup | grep 端口 # 查看端口監(jiān)聽(tīng)情況
curl localhost:端口 # 本地端口檢測(cè)
curl 公網(wǎng)IP:端口 # 外網(wǎng)檢測(cè)
iptables -L
firewalld-cmd --list-all # 防火墻檢測(cè)
telnet IP 端口 # 訪問(wèn)處telnet檢測(cè)端口,也有可能是域名訪問(wèn)
(3) 分析指引
- 程序監(jiān)聽(tīng) 127.0.0.1,公網(wǎng)訪問(wèn)不了?
- 防火墻忘開(kāi)放端口?
云服務(wù)商的安全組也要記得查!
6. 想測(cè)試帶寬是不是太慢?
(1) 現(xiàn)象
- 上下行帶寬跑不滿(mǎn)
- 用戶(hù)訪問(wèn)慢,但服務(wù)器沒(méi)壓力
(2) 排查命令
iperf3 -s # 一臺(tái)服務(wù)器作為服務(wù)端
iperf3 -c <服務(wù)端 IP>
(3) 分析指引
- 內(nèi)網(wǎng)測(cè)速看網(wǎng)線/交換機(jī)瓶頸
- 跨區(qū)域測(cè)速可排查運(yùn)營(yíng)商/跨境網(wǎng)絡(luò)問(wèn)題
場(chǎng)景跟排查命令對(duì)照?qǐng)D
場(chǎng)景 | 推薦命令 |
無(wú)法訪問(wèn)公網(wǎng) | ip , ping, ip route, dig |
接口超時(shí)/服務(wù)不可達(dá) | ss , telnet, iptables |
局域網(wǎng)機(jī)器無(wú)法互通 | arp , ping, tcpdump |
網(wǎng)站訪問(wèn)慢 | traceroute , curl, netstat |
服務(wù)外部無(wú)法訪問(wèn) | ss , firewalld, curl |
網(wǎng)絡(luò)帶寬測(cè)試 | iperf3 |
會(huì)用命令 ≠ 會(huì)排查問(wèn)題。懂場(chǎng)景,用命令解決問(wèn)題,才是高手!