Linux UDP接收缓冲区的最大大小是多少?我原以为它仅受可用RAM的限制,但当我设置rmem_max为5GB时:
echo 5000000000 > /proc/sys/net/core/rmem_max
而在 Erlang 中,实际套接字缓冲区为 4GB:
gen_udp:listen(Port, [{recbuf, 4000000000}])
当我测量缓冲区利用率时,显示:
# netstat -u6anp | grep 5050
udp6 1409995136 0 :::5050 :::* 13483/beam.smp
我不能超过这个1.4GB。对于较小的缓冲区大小,例如500MB,实际缓冲区大小与配置值匹配。我的系统是Debian 6.0,该机器有50GB可用RAM。
getsockopt()
查看实际分配的值。我觉得很难相信您需要4GB来处理流量峰值。也许你只需要更快地读取。 - user207421