我一直在使用JMeter对我的REST API进行负载测试。
当遇到1000个并发用户时,出现以下错误:
Too many open files. Stacktrace follows:
java.net.SocketException: Too many open files
at java.net.Socket.createImpl(Socket.java:397)
at java.net.Socket.getImpl(Socket.java:460)
at java.net.Socket.setSoTimeout(Socket.java:1017)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:126)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:476)
at groovyx.net.http.HTTPBuilder.doRequest(HTTPBuilder.java:441)
at groovyx.net.http.HTTPBuilder.request(HTTPBuilder.java:390)
我的服务器尝试访问另一个REST API来获取数据并进行处理,最后返回一个JSON响应。
如何增加Linux中打开文件的数量?
以下是我正在对另一个服务器进行的调用
Map getResponse(Map data, String url){
HTTPBuilder httpBuilder = new HTTPBuilder(url);
httpBuilder.request(Method.POST, JSON) {
headers.'Authorization' = AppConfig.config.appKey;
headers.'Content-type' = 'application/json'
body = data
response.success = { resp, reader ->
return reader as Map;
}
response.failure = { response, reader ->
return null
}
}
}
2条答案
按热度按时间tmb3ates1#
您确实打开了最大数量的文件/套接字。在Linux机器上打开的文件或套接字的最大数量默认为1024。您需要更改它。您可以参考此java.net.SocketException Too many open files
您可以使用下面的查询从您的终端检查,以获得允许打开的文件的最大数量
从here开始:
现在的情况是底层套接字没有关闭,最终JVM会遇到系统对打开文件描述符的每个进程的限制。
正确的解决方案是在正确的时间关闭套接字(我猜是在服务器关闭连接端的时候或之后不久)。这对HttpURLConnection来说似乎很难做到。这一切都很混乱:
如果没有明确的答案,也许可以将HttpURLConnection对象添加到一个列表中,并在测试运行结束时立即断开所有连接。这仍然会限制运行的总大小,但至少丢失的描述符不会在运行之间累积。
也许真实的的答案是给予HttpURLConnection,而使用Jakarta Commons的HTTP客户端。有人建议,在连接到另一个问题(bug
#4143518
)。whitzsjs2#
**“java.net.套接字异常:任何Java服务器应用程序(如Tomcat、Weblogic、WebSphere等)都可以看到“打开了太多文件”,客户端频繁连接和断开连接。
You can find out how to solve**"java.net.SocketException: Too many files open"**here