我创建了一个具有HelloController的简单Spring Boot应用程序。
Get API: http://localhost:8080/hello
Response: Hello World
现在,我创建了一个JMeter脚本,该脚本具有10万个并发用户,并点击了上述get API。 当我运行JMeter脚本时,计数30k后,我开始收到错误消息:
java.net.NoRouteToHostException: Cannot assign requested address (Address not available)
这是什么原因?我该如何解决这个问题?
答案 0 :(得分:5)
您可以按照Lakshmi Narayan answer来增加可用端口:
分辨率:
- 使用以下命令增加本地端口范围:
echo 1024 65000> / proc / sys / net / ipv4 / ip_local_port_range
这将允许更多本地端口可用。
- 启用如下所示的快速回收TIME_WAIT套接字:
$ sudo sysctl -w net.ipv4.tcp_tw_recycle = 1
默认情况下,
cat / proc / sys / net / ipv4 / tcp_tw_recycle
输出:0(默认情况下禁用)
在生产环境中启用时请务必谨慎,因为这是我们的 内部环境和仅用于Jmeter负载测试的机器,我们 启用回收并解决了问题。
- 启用套接字的重用,如下所示:
$ sudo sysctl -w net.ipv4.tcp_tw_reuse = 1
默认情况下,
cat / proc / sys / net / ipv4 / tcp_tw_reuse
输出:0(默认情况下禁用)
注意:tcp_tw_reuse设置在环境中特别有用 在许多短连接处于打开状态并处于TIME_WAIT状态的地方, 例如网络服务器。重复使用插座可以非常有效地 减少服务器负载。
启用快速回收和重用后,服务器可以支持5K 用户使用单个Unix框加载。