我使用Spring Boot (1.3.0 . m5) with Undertow。最近,我发现当我使用
时,lsof -p $(pidof java)
命令几个小时后,它向我展示了大约700行,其中大多数是与客户端建立的TCP连接,即使在最近一个小时内几乎没有人进入该页面(当我连接到该站点时,我的连接在大约5分钟后消失)。
最有可能的是这是我的java.net.SocketException的来源:太多打开的文件-我得到每隔几天(要求我重新启动应用程序)之前,我注意到陈旧的连接。我增加了系统中打开文件的最大限制,但这显然是一个短期的解决方案。
如果你能帮我解决这个问题,我会很感激的。谢谢!Undertow没有默认的连接超时,您需要使用如下方式设置它:
Undertow.builder().setServerOption(UndertowOptions.NO_REQUEST_TIMEOUT, 60000)
这将告诉Undertow在没有客户端请求的情况下在60秒后关闭连接。
尝试设置httpServerExchange.setPersistent(false);
,当我遇到同样的问题时,它可以帮助我。是的,它会导致太多的打开文件错误,因为它超出了文件描述符