运行到java.net.bindexception的问题无法分配请求的地址

时间:2011-05-26 21:09:44

标签: java linux tcp

我目前正在测试一台带有模拟大量用户的自动测试客户端的服务器。服务器和客户端都是用Java编写的。客户端为每个用户打开tcp / ip连接。服务器和客户端都在Ubuntu linux上运行,客户端在11.04上运行,服务器在10.04上运行。

测试结果很好,直到27000个并发打开的连接,之后我决定跳到36000(服务器和客户端资源并不是真的用完了27000所以我决定稍稍跳一点)。 当我尝试运行36k的测试时,我在客户端遇到以下异常

  • java.net.BindException:无法分配请求的地址

据我所知,在36k我应该仍然有自由端口,因为在这两台机器上都没有运行其他东西,并且tcp将端口号限制在2 ^ 16即65536. 现在因为它是linux我也设置了使用ulimit -n 100000将用户打开的文件数设置为100k。 但我仍然得到同样的例外。

我想知道还有什么可能导致上述异常的原因,还是linux以某种其他方式限制了传出连接的数量?

提前致谢,

达尼耶尔

1 个答案:

答案 0 :(得分:5)

默认情况下,Linux从32768..61000范围内选择动态分配的端口。如果绑定到特定端口号,则其他可用于静态分配。如果您希望更多端口可用于动态分配,则可以更改范围,但请注意不要包含用于所需特定服务的端口(例如,对于X11为6000)。你也不应该允许端口<由于具有特权,因此动态分配1024。检查或更改范围:

$ cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

# echo "16384 65535" > /proc/sys/net/ipv4/ip_local_port_range