由於輕負載電腦中的 pfmalloc 頁面而導致的 UDP RecvBufErrors

由於輕負載電腦中的 pfmalloc 頁面而導致的 UDP RecvBufErrors

我的 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

相關內容