我在亚马逊EC2中Openfire
上运行了stress test,在连接28.000之后,我的压力测试重置了,这个错误出现在我身上。
这是什么?
答案 0 :(得分:5)
据我所知,你的机器没有可用的端口。
您可以使用TIME_WAIT中的套接字数确认:
netstat -a
如果确认 - 您可以考虑调整tcp配置,例如如上所述:https://serverfault.com/questions/23385/huge-amount-of-time-wait-connections-says-netstat
答案 1 :(得分:1)
如果存在大量TCP / IP连接并且您的程序在OS级别上超过了可用的端口范围,则可能会出现此错误(java.net.NoRouteToHostException:无法分配请求的地址)。
命令检查端口范围 猫/ proc / sys / net / ipv4 / ip_local_port_range
可以通过在操作系统级别上微调TCP套接字参数来避免这种情况。
使用以下命令增加本地端口范围
echo 1024 65000> / proc / sys / net / ipv4 / ip_local_port_range。
更改此限制之前请多加注意。我建议首先弄清楚为什么存在大量TCP / IP连接。程序中是否存在任何连接泄漏(使用后未关闭连接)?如果是这种情况,并且您的程序确实需要大量用于TCP / IP的端口,则只需修改限制。
使用以下命令更改TCP_FIN_TIMEOUT
echo 30> / proc / sys / net / ipv4 / tcp_fin_timeout
此设置确定TCP / IP释放封闭的连接并重新使用其资源之前必须经过的时间。通过减小该条目的值,TCP / IP可以更快地释放关闭的连接,从而使更多资源可用于新连接。如果有许多处于TIME_WAIT状态的连接,请进行调整。
注意:-仅当许多TCP / IP连接处于CLOSE_WAIT状态时,此功能才有用。 可以通过命令-“ netstat -a -n | grep -E” ^(tcp)“ | cut -c 68- | sort | uniq -c | sort -n”来确定TCP / IP连接状态。
< / li>使用以下命令更改TCP_TW_REUSE
回声1> / proc / sys / net / ipv4 / tcp_tw_reuse
当从协议角度来看是安全的时候,这允许在TIME_WAIT状态下为新的连接重用套接字。默认值为0(禁用)。通常,它是tcp_tw_recycle的更安全的替代方法
注意:tcp_tw_reuse设置在Web服务器等开放大量短连接并保持TIME_WAIT状态的环境中特别有用。重用套接字对于减少服务器负载非常有效。
使用以下命令更改TCP_TW_RECYCLE
回声1> / proc / sys / net / ipv4 / tcp_tw_recycle
它可以快速回收TIME_WAIT套接字。默认值为0(禁用)。