Spring Boot-大量无效请求和套接字接受失败的java.io.IOException:打开文件过多

时间:2018-10-29 08:56:50

标签: java spring spring-boot ioexception

我有运行Spring (Spring Boot 1.5.2.RELEASE)应用程序的计算机。最近,我的日志文件中收到很多警告:

.w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: null; nested exception is java.net.SocketTimeoutException

我已经用tcpdump进行了检查,很多请求没有正文(空/空)或正文不正确,例如\00\00\00\00\00\00\00speed":"23.3","user_id":106312}

最大的问题是一段时间后,我开始在应用程序中接收异常:

org.apache.tomcat.util.net.NioEndpoint   : Socket accept failed

java.io.IOException: Too many open files
    at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
    at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:241)
    at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:443)
    at java.lang.Thread.run(Thread.java:745)

ulimit -n说打开文件的限制设置为65536,所以我认为它足够大。

我假设接收到大量无效请求会导致IOException,但为什么呢?我应该怎么做才能避免并修复它?

1 个答案:

答案 0 :(得分:1)

我想您在Spring Boot中使用了Web套接字。您最多只能侦听65535端口,您不能在计算机上超过此值。您应该检查是否正确关闭了插座。