我创建了一个带有 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)
这是什么原因呢?我该如何解决这个问题?
- 我使用的是带有 8GB RAM 的 UBUNTU 18.04。
- 执行操作时,仅打开JMeter和STS。
您可以关注拉克希米·纳拉扬的回答增加可用端口:
解决:
- 使用以下命令增加本地端口范围:
回声 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
这允许更多本地端口可用。
- 启用快速回收 TIME_WAIT 套接字,如下所示:
$ sudo sysctl -w net.ipv4.tcp_tw_recycle=1
默认情况下,
猫 /proc/sys/net/ipv4/tcp_tw_recycle
输出:0(默认禁用)
如果在生产环境中启用,请务必小心,因为这是我们的
内部环境和机器仅用于Jmeter负载测试,我们
启用回收并解决了问题。
- 启用套接字的重用,如下所示:
$ sudo sysctl -w net.ipv4.tcp_tw_reuse=1
默认情况下,
猫 /proc/sys/net/ipv4/tcp_tw_reuse
输出:0(默认禁用)
注意:tcp_tw_reuse 设置在环境中特别有用
其中有许多短连接打开并处于 TIME_WAIT 状态,
例如网络服务器。重复使用套接字非常有效
减少服务器负载。
启用快速回收和再利用后,服务器可以支持5K
用户使用单个 Unix 盒子加载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)