Linux
如何監控接受隊列的長度?
我有一個假設:有時 TCP 連接的到達速度比我的伺服器更快
accept()
。他們排隊,直到隊列溢出,然後出現問題。我如何確認這種情況正在發生?
我可以監控接受隊列的長度或溢出的數量嗎?有沒有暴露在某個地方的櫃檯?
要檢查您的隊列是否溢出,請使用 netstat 或 nstat
[centos ~]$ nstat -az | grep -i listen TcpExtListenOverflows 3518352 0.0 TcpExtListenDrops 3518388 0.0 TcpExtTCPFastOpenListenOverflow 0 0.0 [centos ~]$ netstat -s | grep -i LISTEN 3518352 times the listen queue of a socket overflowed 3518388 SYNs to LISTEN sockets dropped
參考: https ://perfchron.com/2015/12/26/investigating-linux-network-issues-with-netstat-and-nstat/
要監控隊列大小,請使用 ss 命令並查找 SYN-RECV 套接字。
$ ss -n state syn-recv sport = :80 | wc -l 119
參考: https ://blog.cloudflare.com/syn-packet-handling-in-the-wild/