由于轻负载计算机中的 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返回-ENOMEMsock_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

相关内容