Linux

TCP 緩衝區不斷填滿(Recv-Q 已滿):命名為無響應

  • November 7, 2021

使用 netstat -an,我設置了 Recv-Q 已滿的消息。它正在填充到 rmem_max:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
udp   1894912      0 10.0.64.150:53              0.0.0.0:*

(它會一直“填充”直到崩潰)

尺寸:

/proc/sys/net/core/optmem_max:20480
/proc/sys/net/core/rmem_default:8388608
/proc/sys/net/core/rmem_max:8388608
/proc/sys/net/core/wmem_default:229376
/proc/sys/net/core/wmem_max:229376

結果 netstat -su:

Udp:
426057 packets received
37152 packets to unknown port received.
2350589 packet receive errors
517422 packets sent

誰有想法?

顯然日誌記錄有問題。我將 dns 伺服器設置為登錄到 rsyslog。在跟踪時,系統日誌的文件描述符似乎沒有“工作”。

通過將日誌綁定到本地文件解決:

logging{
 channel bindlog {
   file "/var/log/named/bind.log" versions 3 size 5m;
   severity info;
   print-time yes;
   print-severity yes;
   print-category yes;
 };
 category default{
   bindlog;
 };
};

這意味著您的網卡和核心能夠很好地接收數據包,但是無論您的 DNS 伺服器是什麼,或者任何正在偵聽 UDP 53 的伺服器都不能經常或足夠快地從 UDP 套接字讀取數據。

引用自:https://unix.stackexchange.com/questions/100913