Linux UDP 接收缓冲区的最大大小是多少?我认为它仅受可用 RAM 的限制,但是当我设置时
rmem_max 为 5GB:
echo 5000000000 > /proc/sys/net/core/rmem_max
和 4GB 用于实际套接字缓冲区(在 Erlang 中):
gen_udp:listen(Port, [{recbuf, 4000000000}])
当我测量缓冲区利用率时,它显示:
# netstat -u6anp | grep 5050
udp6 1409995136 0 :::5050 :::* 13483/beam.smp
我不能超过这个 1.4GB。对于较小的缓冲区大小,例如500MB,实际缓冲区大小与配置值匹配。我的系统是 Debian 6.0,机器有 50GB 可用内存。
最佳答案
好像linux有限制。 我已尝试将 rmem_max 设置为 2^32-1 并成功。
root@xxx:/proc/sys/net/core# echo 2147483647 > rmem_max
root@xxx:/proc/sys/net/core# cat rmem_max
2147483647
2^32 太多了:
root@xxx:/proc/sys/net/core# echo 2147483648 > rmem_max
root@xxx:/proc/sys/net/core# cat rmem_max
-18446744071562067968
设置为 5000000000 产量:
root@xxx:/proc/sys/net/core# echo 5000000000 > rmem_max
root@xxx:/proc/sys/net/core# cat rmem_max
705032704
我已经在 python 中测试了设置和获取套接字接收缓冲区
ss.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, bufferSize)
print ss.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
如果 'bufferSize' 小于 1024^3 程序打印双倍的 'bufferSize',否则回落到 256。
705032704*2 = 1410065408的值接近netstat得到的1409995136
关于Linux UDP 最大接收缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16460261/