作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的机器运行着 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,但为什么呢?我应该怎么做才能避免并修复它?
最佳答案
我猜你在 spring boot 中使用了 web socket。您最多只能在 65535 端口上监听,您不能在机器上超过这个值。您应该检查是否正确关闭了 socket 。
关于java - Spring Boot - 大量无效请求和套接字接受失败 java.io.IOException : Too many open files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53041876/
我是一名优秀的程序员,十分优秀!