错误
No buffer space available
并不意味着套接字缓冲区已满。这意味着linux内核不能为套接字缓冲区分配内存。没有任何套接字缓冲区的内存,所以当这种情况发生时,在释放一些内存之前,不可能通过任何套接字发送任何数据。增加
wmem_max
和
rmem_max
可能会使问题变得更糟,因为它们可能会增加每个插槽的内存消耗。您可以检查总体内存消耗以及为udp套接字缓冲区分配了多少内存:
$ cat /proc/net/sockstat
sockets: used 315
TCP: inuse 8 orphan 0 tw 0 alloc 13 mem 1
UDP: inuse 3853 mem 240812