目錄標題
- 排查步驟:TCP重傳率高與傳輸延遲問題
- v1.0
- 通過 `rate(node_netstat_Tcp_RetransSegs[3m])` 排查 TCP 重傳問題的步驟
- 1. **指標含義與初步分析**
- 2. **關聯指標排查**
- 3. **定位具體問題源**
- 4. **解決方案**
- 5. **驗證與監控**
- v2.0
- 一、基礎檢查
- 二、網絡層分析
- 三、系統配置檢查
- 四、監控聯動
- 五、典型場景
排查步驟:TCP重傳率高與傳輸延遲問題
v1.0
通過 rate(node_netstat_Tcp_RetransSegs[3m])
排查 TCP 重傳問題的步驟
1. 指標含義與初步分析
- 指標解釋:
node_netstat_Tcp_RetransSegs
表示 TCP 重傳段的累計數量,rate(...[3m])
計算過去 3 分鐘內每秒平均重傳速率。高重傳率(如持續超過 100/s)可能由網絡擁塞、丟包或連接不穩定導致。 - 閾值判斷:結合歷史基線數據,若重傳率突增或持續高位,需進一步定位。
2. 關聯指標排查
- 網絡層指標:
- 檢查網絡接口錯誤包:
rate(node_network_receive_errs_total[3m])
和rate(node_network_transmit_errs_total[3m])
,確認是否因硬件故障或驅動問題導致丟包。 - 觀察帶寬利用率:
rate(node_network_transmit_bytes_total[3m])
,高負載可能引發擁塞。
- 檢查網絡接口錯誤包:
- TCP 連接狀態:
- 監控連接數波動:
node_netstat_Tcp_CurrEstab
(當前 ESTABLISHED 連接數),連接數激增可能導致資源爭搶。
- 監控連接數波動:
3. 定位具體問題源
- 按實例/IP 篩選:
確定重傳集中在特定節點或服務 IP。topk(5, rate(node_netstat_Tcp_RetransSegs{instance=~"$target"}[3m]))
- 結合應用層指標:
- 若使用 Kubernetes,通過
kube_pod_container_resource_limits
和kube_pod_status_phase
檢查 Pod 資源是否過載。 - 調用鏈追蹤(如 Jaeger)分析重傳是否與特定服務調用相關。
- 若使用 Kubernetes,通過
4. 解決方案
- 網絡優化:
- 調整內核參數:降低
net.ipv4.tcp_retries2
(默認 15)減少重試次數,但需權衡可靠性。 - 優化 MTU 和 TCP 窗口大小:通過
ethtool
檢查網卡配置,避免分片或窗口溢出。
- 調整內核參數:降低
- 應用層調整:
- 設置合理的連接超時和重試機制,避免無效連接堆積。
- 使用連接池減少短連接頻繁建立/拆除的開銷。
- 基礎設施檢查:
- 通過 Prometheus Blackbox Exporter 對目標服務進行 TCP 探測,驗證網絡路徑質量。
5. 驗證與監控
- 部署修復后,持續觀察
rate(node_netstat_Tcp_RetransSegs[3m])
趨勢。
v2.0
一、基礎檢查
-
確認網絡設備狀態
- 檢查服務器網卡狀態:
ethtool <網卡名>
,關注Errors
和Dropped
字段 - 查看帶寬使用率:
nload
或iftop
,排除帶寬占滿問題
- 檢查服務器網卡狀態:
-
檢查TCP連接狀態
ss -s | grep retrans # 查看全局TCP重傳統計 ss -ti # 查看各連接RTT(round trip time)和重傳次數
若特定連接
retrans
值異常,需針對性分析(如高延遲的遠程地址)
二、網絡層分析
-
路由與鏈路質量測試
traceroute <目標IP> # 定位路由跳數異常 mtr --report <目標IP> # 持續監測丟包率
若中間節點丟包率>1%,需聯系網絡運營商排查
-
抓包分析重傳原因
tcpdump -i <網卡> -w retrans.pcap 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
使用Wireshark分析
retrans.pcap
,關注:- 重復ACK(快速重傳觸發)
- 超時重傳(RTO超過200ms)
- 亂序包比例(
tcptrace
工具可量化)
三、系統配置檢查
-
內核參數調優
檢查關鍵參數(引用[3]相關配置):sysctl net.ipv4.tcp_retries2 # 默認15次重傳(建議5-8) sysctl net.ipv4.tcp_slow_start_after_idle # 建議設為0(禁用慢啟動)
可添加至
/etc/sysctl.conf
:net.ipv4.tcp_retries2 = 5 net.ipv4.tcp_slow_start_after_idle = 0
-
防火墻與端口限制
- 檢查
netstat -tnlp
(引用[2]方法)確認端口監聽狀態 - 驗證防火墻規則:
iptables -L -n -v
,排除誤攔截TCP報文
- 檢查
四、監控聯動
- 關聯監控指標
在Grafana(端口3000)中創建儀表盤,組合監控:
結合Alertmanager(端口9093)設置復合告警規則(參考引用[5]語法)rate(node_netstat_Tcp_RetransSegs[3m]) > 50 # 自定義閾值 + (probe_http_duration_seconds{phase="connect"} > 1)
五、典型場景
現象 | 可能原因 | 驗證方法 |
---|---|---|
重傳率高+RTT波動大 | 網絡擁塞 | 查看tcptrace 的擁塞窗口變化 |
固定目標IP高延遲 | 跨境鏈路問題 | mtr 測試國際路由節點 |
突發性重傳 | 服務器CPU/內存過載 | top 檢查系統負載 |
相關問題