今日看了一篇文章, 感受寫的不錯, 主要是講的服務間調用超時的故障排查經歷.linux
由於這中間涉及不少系統命令的一些使用, 延伸出一些知識點, 如下爲簡單的記錄:bash
每次一發版致使服務A調用B服務超時, B沒有任何請求記錄日誌, 初次定位到爲網絡問題cookie
使用 netstat -anp 查看網絡狀況鏈接正常網絡
netstat -anp命令簡單說明:
-a,顯示全部
-n,不用別名顯示,只用數字顯示
-p,顯示進程號和進程名
LISTEN 表示正在監聽
ESTABLISHED 表示已鏈接
複製代碼
上面是當前具體的狀況, 若是查看歷史統計狀況可使用 netstat -sless
能夠重點關注統計數字展現異常socket
上面分析的服務A. 看着很正常, 分析服務B看一下。tcp
服務B使用 dmesg 查看發現這條信息性能
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
possible SYN flooding on port 20880. Sending cookies.
複製代碼
以前咱們文章分析過, 這個報警明顯syn_flood攻擊.ui
使用 netstat -s查看 在TpcExt 一樣發現了異常數據spa
TcpExt:
...
1607 times the listen queue of a socket overflowed
...
複製代碼
最終文中判定緣由爲服務B tcp_backlog 溢出, 機器backlog設置太小
SYN queue隊列長度配置
/proc/sys/net/ipv4/tcp_max_syn_backlog
Accept queue(ESTABLISHED)隊列長度配置
/proc/sys/net/core/somaxconn
tcp_max_syn_backlog是指定所能接受SYN同步包的最大客戶端數量,即半鏈接上限;
somaxconn是指服務端所能accept即處理數據的最大客戶端數量,即完成鏈接上限。
複製代碼
在linux2.2後 SYN_RECEIVED隊列的大小由proc/sys/net/ipv4/tcp_max_syn_backlog系統參數指定
ESTABLISHED隊列由backlog和/proc/sys/net/core/somaxconn中較小的指定。
dmesg | tail
這裏展現的是最近 10 條系統消息日誌,若是系統消息沒有就不會展現。
主要是看因爲性能問題致使的錯誤。
例如包含了殺死 OOM 問題的進程,丟棄 TCP 請求的問題。
複製代碼
dmesg用來顯示內核環緩衝區(kernel-ring buffer)內容,內核將各類消息存放在這裏。在系統引導時,內核將與硬件和模塊初始化相關的信息填到這個緩衝區中。內核環緩衝區中的消息對於診斷系統問題 一般很是有用。在運行dmesg時,它顯示大量信息。一般經過less或grep使用管道查看dmesg的輸出,這樣能夠更容易找到待查信息