当前位置: 首页 > 知识库问答 >
问题:

Spring Boot-大量无效请求和套接字接受失败的java。木卫一。IOException:打开的文件太多

葛高澹
2023-03-14

我的机器正在运行,带有Spring(springboot 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

我已经检查了tcp转储,很多请求没有正文(空/空)或有不正确的正文,例如\00\00\00\00\00\00\00\00":"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个答案

苗冯浩
2023-03-14

我猜您使用的是带有Spring Boot的web套接字。您最多只能在65535端口上侦听,在计算机上不能超过此值。你应该检查一下你的插座是否关好了。

 类似资料:
  • 问题内容: 我使用多个文件来执行一些文件I / O(写入19个文件,确实如此)。写他们几百次后,我得到了。但实际上我一次只能打开几个文件。这里有什么问题?我可以验证写入是否成功。 问题答案: 在Linux和其他UNIX /类似UNIX的平台上,操作系统对进程在任何给定时间可能具有的打开文件描述符的数量进行了限制。在过去,此限制曾经是硬接线1,并且相对较小。如今,它要大得多(几百/千),并且受“软”

  • 我有一个项目。它使用了、和maven。可以使用成功构建它。 要运行Spring引导应用程序,我使用了命令 但它错误地失败了 我为start命令添加了额外的参数 但是当我运行它时,我得到了这个错误 到底是什么问题?

  • 我得到了异常java.net。BindException:无法分配请求的地址,如果发生此异常,我会尝试使用相同的端口和主机再次绑定它。但在尝试绑定之后,我得到了java.io。IOException:打开的文件太多。 堆栈跟踪: 在一些失败之后: 当java.net时,FD是否可能保持打开状态。BindException:无法分配请求的地址?

  • 我正在编写一个需要读取/写入大量文件的遗传算法。GA的适用性测试是调用一个名为的程序,该程序将文件作为输入并生成文件作为输出。 一切都在工作,除非我使遗传算法的种群规模和/或总代数太大。然后,经过这么多代人,我开始得到这个:(我为许多不同的文件反复得到它,索引 只是我上次运行它时首先出现的那个)。这很奇怪,因为我不是在第一代或第二代之后得到错误,而是在相当多的世代之后,这表明每一代都会打开更多它没

  • 问题内容: 我必须运行才能进行进程的堆转储。但返回: 所以我用了: 使用 可以进行堆转储吗? 我正在等待20分钟,尚未完成。有什么想法吗? 问题答案: jmapvs. jmap -F以及jstackvs. jstack -F使用完全不同的机制与目标JVM通信。 jmap / jstack 在没有这些工具的情况下运行时,请使用动态附加机制。其工作原理如下。 连接到进程1234之前,请在目标进程的工作

  • 问题内容: 我必须运行才能进行进程的堆转储。但返回: 所以我用了: 使用 可以进行堆转储吗? 我正在等待20分钟,尚未完成。有什么想法吗? 问题答案: vs. 以及vs. 使用完全不同的机制与目标JVM通信。 jmap / jstack 在没有这些工具的情况下运行时,请使用动态附加机制。其工作原理如下。 连接到Java进程1234之前,请在目标进程的工作目录或处创建一个文件。 然后发送到目标进程。