我的 Linux 機器正在丟棄 UDP 封包。它有一個帶驅動程式的 10GbeE 82599ES NIC ixgbe
。
運行nc
接收資料包如下:
$ nc -I 100000000 -l 2004 -u > /dev/null
並從不同的機器發送資料包:
$ cat /dev/zero | nc 10.5.10.248 2004 -u
接收機器上的 RcvbufErrors/proc/net/snmp
瘋狂增加。有趣的是,/proc/net/udp
沒有顯示丟包。我的核心版本是:
$ uname -a
Linux titan 3.16.0-4-amd64 #1 SMP Debian 3.16.39-1+deb8u2 (2017-03-07) x86_64 GNU/Linux
據我所知,在沒有 UDP 丟棄的情況下獲得 RcvbufErrors 的唯一方法是:sk_filter-ENOMEM
返回sock_queue_recv_skb,如果套接字緩衝區頁面被pfmemalloc
編輯,就會發生這種情況,如果機器面臨記憶體壓力,就會發生這種情況。
奇怪的是,它free
說有足夠的空間:
$ free -m
total used free shared buffers cached
Mem: 32210 32016 194 178 352 29948
-/+ buffers/cache: 1715 30495
Swap: 65467 162 65305
幫助? (提前致謝)
K