gpt4 book ai didi

java - 收到错误 - 打开套接字时出错 : java.net.SocketException:我的应用程序中打开的文件太多

转载 作者:行者123 更新时间:2023-12-02 02:40:22 25 4
gpt4 key购买 nike

在我的应用程序中,创建了大约 10535 个线程,每个线程都会进行 SOAP 调用来获取响应

下面是错误跟踪。这是因为服务器无法处理这么多请求吗?如果是,我该如何解决?

[SOAPException: faultCode=SOAP-ENV:Client; msg=Error opening socket: java.net.SocketException: Too many open files; targetException=java.lang.IllegalArgumentException: Error opening socket: java.net.SocketException: Too many open files]
at org.apache.soap.transport.http.SOAPHTTPConnection.send(SOAPHTTPConnection.java:354)
at org.apache.soap.messaging.Message.send(Message.java:123)

最佳答案

问题的根本原因是:

From my application there are about 10535 threads ...

这简直太疯狂了。您不可能通过运行大量线程来提高性能。可能恰恰相反,因为每个线程都有一个线程堆栈和堆上的对象。所有这些内存的开销、许多 Activity 对象的 GC 开销、线程上下文切换、争用等都将是巨大的。

每个线程都有一个 Socket,消耗内核中的文件描述符和资源。

我建议您使用工作队列和有界工作线程池。执行此操作的简单方法是使用 ExecutorService;阅读javadocs

<小时/>

如果您确实坚持这样做,您将需要阅读如何增加每个进程的操作系统级打开文件数。解决方案取决于您的操作系统。但该限制是由操作系统而不是 Java 强制执行的,并且您无法在 JVM 中解决它。

另请参阅:

关于java - 收到错误 - 打开套接字时出错 : java.net.SocketException:我的应用程序中打开的文件太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45587835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com