對外提供tcp服務的程序,在壓測時發現,tcp連接配接syn響應慢,甚至不響應。導緻無法正常接收新的請求,影響業務。
抓包分析:

如上有大量的重傳,有時能夠正常的響應請求,有時就無法響應請求。
1、系統負載是否過高
2、是否有安全軟體(比如安全狗,安騎士等)
3、是否開啟防火牆
4、snat問題
5、tcp相關參數:net.ipv4.tcp_max_syn_backlog\net.ipv4.tcp_syncookies\fs.file-max等
6、系統最大檔案打開數是否有限制
7、程序最大檔案打開數是否有限制
8、業務程式是否有相關的安全限制
9、協定棧異常
10、網絡安全裝置原因
12月2日增加:
1、由于服務端收包時checksum錯誤,核心會預設丢棄該封包;
2、列隊滿了
其中recv-q表示目前accept queue中的連接配接數量,send-q表示accept queue的最大長度。如上:可以看到程序的accept queue預設是128,因為受到系統net.core.somaxconn=128的限制。
根據排查思路中的幾個關鍵點,進行逐一仔細确認:
1、檢查系統負載是否正常
2、是否有安全軟體:關閉安騎士服務,檢查系統程序是否有其他安全軟體程序
3、關閉系統防火牆:排除由于防火牆安全配置導緻的問題。
4、snat問題:根據問題環境判斷,是否有該問題,如有根據案例方式處理。
5、檢查tcp相關參數:調大相關參數:
net.ipv4.tcp_max_syn_backlog\net.ipv4.tcp_syncookies\fs.file-max等
6、系統最大檔案打開數是否有限制:
主要關注open files資訊
7、檢視程序最大檔案打開數限制
程序的調整方法:
如果上述方法無法使用,或者不生效,則:
prlimit要2.6.36版本+才行
8、業務程式是否有相關的限制(聯系使用者确認)
9、協定棧異常;嘗試初始化。
針對問題:tcp連接配接失敗
分析:netstat -s輸出中和連接配接失敗相關的參數
`202270382 invalid syn cookies received
--- 三次握手ack包,syncookies校驗沒通過;
13700572 resets received for embryonic syn_recv sockets
---syn_recv狀态下,收到非重傳的syn包,則傳回reset
1123035 passive connections rejected because of time stamp
---開啟sysctl_tw_recycle,syn包相應連接配接的時間戳 小于 路由中儲存的時間戳;
14886782 failed connection attempts
--- syn_recv狀态下,socket被關閉; 或者 收到syn包(非重傳)
438798 times the listen queue of a socket overflowed
---收到三次握手ack包,accept隊列滿
438798 syns to listen sockets ignored
---收到三次握手ack包,因各種原因(包括accept隊列滿) 建立socket失敗`