JMeter:java.net.NoRouteToHostException:无法分配请求的地址(地址不可用)

时间:2018-11-07 12:04:41

标签: java performance spring-boot jmeter

我创建了一个具有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打开。

1 个答案:

答案 0 :(得分:5)

您可以按照Lakshmi Narayan answer来增加可用端口:

  

分辨率:

     
      
  1. 使用以下命令增加本地端口范围:
  2.   
     

echo 1024 65000> / proc / sys / net / ipv4 / ip_local_port_range

     

这将允许更多本地端口可用。

     
      
  1. 启用如下所示的快速回收TIME_WAIT套接字:
  2.   
     

$ sudo sysctl -w net.ipv4.tcp_tw_recycle = 1

     

默认情况下,

     

cat / proc / sys / net / ipv4 / tcp_tw_recycle

     

输出:0(默认情况下禁用)

     

在生产环境中启用时请务必谨慎,因为这是我们的   内部环境和仅用于Jmeter负载测试的机器,我们   启用回收并解决了问题。

     
      
  1. 启用套接字的重用,如下所示:
  2.   
     

$ 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框加载。