![로드가 적은 시스템의 pfmalloc 페이지로 인한 UDP RecvBufError](https://linux55.com/image/109814/%EB%A1%9C%EB%93%9C%EA%B0%80%20%EC%A0%81%EC%9D%80%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98%20pfmalloc%20%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A1%9C%20%EC%9D%B8%ED%95%9C%20UDP%20RecvBufError.png)
내 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
수신 시스템의 RcvbufError가 /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 삭제 없이 RcvbufError를 얻는 유일한 방법은 다음과 같습니다.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
돕다? ! (미리 감사드립니다)
케이