gpt4 book ai didi

java - 套接字异常 : TOO MANY OPEN FILES

转载 作者:行者123 更新时间:2023-11-28 22:24:19 25 4
gpt4 key购买 nike

Web 服务 - Tomcat 部署在 LINUX 中下面是我发送 HTTP 请求的代码我读到 TOO MANY OPEN FILES 导致客户端不关闭流并保持打开状态我尝试在下面的代码中关闭我的流并将 ulimit -n 数字增加到 4096,仍然出现此错误

if ("GET".equals(methodType)) { //req
System.setProperty("http.keepAlive", "false");
logger.info("<--------CALLING TAX-CLIENT REQUEST------------>");
URL url = new URL(api_url + "?" + queryParams);
// URLEncoder.encode(queryParams, "UTF-8"
logger.debug("API_URL TO SEND REQUEST : " + url);
logger.debug("Received TOKEN IS : " + encoding_token);
conn = (HttpsURLConnection) url.openConnection();
conn.setRequestProperty("Authorization", "Bearer " + encoding_token);
conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
conn.setRequestProperty("Accept-Charset", "charset=UTF-8");
conn.setRequestMethod("GET");
conn.setDoInput(true);
InputStream _is;
/* error from server */
if (conn.getResponseCode() == HttpsURLConnection.HTTP_INTERNAL_ERROR) {
_is = conn.getErrorStream();
logger.error("ERROR : " + _is.toString());
throw new BillingException("501", _is.toString(), new BillingExceptionBean());
} else {
_is = conn.getInputStream();
}

try (BufferedReader in = new BufferedReader(
new InputStreamReader(_is, Charset.forName("UTF-8")), BUFFER_SIZE)) {
inputLine = in.readLine();
logger.info("Response from tax : " + inputLine);
if (inputLine.contains("default message")) {
JSONObject jsonObject = new JSONObject(inputLine);
String error = jsonObject.getString("code") + ":" + jsonObject.getString("message") + "\n";
this.setErrorMessage(error);
} else if (inputLine.contains("error") & inputLine.contains("default")) {
String str = inputLine;
String[] parts = str.split("default message");
String str1 = parts[2];
String[] parts2 = str1.split("\"");
this.setErrorMessage(parts2[0].toString());
}
logger.info("Buffered Reader is closed");
in.close();
}
logger.info("Input stream is closing connection");
// _is.close();
// conn.disconnect();

这是我得到的错误:

Feb 21, 2019 9:04:56 AM org.apache.tomcat.util.net.JIoEndpoint$Acceptor run
SEVERE: Socket accept failed
java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:220)
at java.lang.Thread.run(Thread.java:745)

最佳答案

错误表明 accept() 调用无法接受套接字连接。根据基础文档 system call此异常有两个可能的原因:您的进程中打开的文件太多,或者系统范围内打开的文件太多。

可能打开的连接太多。您可以使用 netstat -anp | grep TOMCAT_PROCESS_ID 查看有多少连接涉及 Tomcat 服务器。这将包括来自客户端的入站连接,以及从您的网络应用程序到外部服务的出站连接;入站连接会将 Tomcat 端口显示为目标。如果您有很多入站连接,那么这是一个问题,即有太多客户端或未关闭连接的客户端(您的示例似乎正在关闭连接)。

更有可能是您没有正确关闭网络应用程序(已部署到 Tomcat 服务器)中的文件。为了诊断我会运行 ls -l/proc/TOMCAT_PROCESS_ID/fd,这将为您提供该进程打开的所有文件和套接字的列表。您将在此列表中看到应用程序 WAR,以及 Tomcat 使用的一些 JAR。如果您在文件系统中看到很多文件,请查看它们的打开位置。

关于java - 套接字异常 : TOO MANY OPEN FILES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801335/

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