網絡問題的排查解決

一條很有用的命令解決tcp數據發送積壓問題netstat -anpt|grep 2181|awk ‘{if($2!=0||$3!=0) print $0}’

 

以kafka爲例:開源kafka默認配置的據傳輸端口是2181,kafka server會監聽2181端口,等待客戶端連接,

 

netstat -anpt的輸出所有的tcp連接信息

 

netstat -anpt|grep 2181輸出和2181有關的端口的連接信息

 

man netstat一下如下圖:

第二列recv-q 代表此連接,內核已把數據接收到的tcp的緩衝區,但還未被應用程序調用read讀走

第三列send-q代表此連接,應用程序已調用write寫進tcp緩衝區並且已經發送到接收端但接收端還未確認的數據

 

情況1

如果接收端recv-q有大量積壓代表本機應用程序有問題,可能存在性能問題,數據已從網卡拷貝到tcp內核接收緩衝區就待應用程序調用read拷貝到用戶空間了,此時增加多個線程處理即可,如果應用要把數據落盤,或再通過網絡轉發走,還要關注是否,是磁盤和下一環節的網絡問題導致

例如:如果發現kafka broker節點2181端口recv-q積壓比較多,在cpu充足的情況下適當增加網絡io和磁盤io線程,同時查看iowait

 

情況2

如果發送端send-q有大量積壓,

1:接收端的recv-q沒有積壓則代表,發送端與接收端的網絡,或網卡有問題,可用traceroute查看具體是網絡鏈路的那一環節出現了問題,如果鏈路的每一環節都沒問題那就是網卡的問題了

2:接收端的recv-q有積壓則代表,同 情況1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章