gpt4 book ai didi

java - 处理对 {}->http ://IP:80: Too many open files 的请求时捕获 I/O 异常

转载 作者:行者123 更新时间:2023-12-02 04:21:55 26 4
gpt4 key购买 nike

我有这个架构,3个系统:

  1. 后端
  2. 中间件
  3. 前端(客户端应用程序)。

我在后端和中间件之间有休息Web服务,在前端和中间件之间还有另一个不同的休息服务(如下图所示)

enter image description here

如上图所示,客户端正在调用中间件,中间件正在调用后端休息服务。

现在,当我运行很少的请求时,一切都工作正常,但是当我开始从客户端进行压力测试时(我使用 JMeter 进行此测试并调用中间件服务),我开始收到此异常

enter image description here

我使用此代码来调用后端服务:

public static String makeHttpPostCall(String url2, String param1, String type,
String username, String password) throws IOException {

String response1 = "";


CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
AuthScope.ANY,
new UsernamePasswordCredentials(username, password));

CloseableHttpClient client = HttpClients.custom()
.setDefaultCredentialsProvider(credsProvider)
.build();


HttpPost post = new HttpPost(url2);

List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("param1", param1));
urlParameters.add(new BasicNameValuePair("type", type));

post.setEntity(new UrlEncodedFormEntity(urlParameters));

HttpResponse response = client.execute(post);



System.out.println("Response Code : "+ response.getStatusLine().getStatusCode());
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));


String line;
while ((line = rd.readLine()) != null) {
response1 += line;
}
System.out.println("response1: "+ response1);
return response1;
}

请谁能告诉我中间件或后端的问题出在哪里,以及为什么会发生?

最佳答案

您没有关闭客户端 http 连接。尝试:

...
}
System.out.println("response1: "+ response1);

client.close();

return response1;
...

该异常表明尝试打开新的http连接时发生错误。请注意,虽然它是一个网络连接,但对于底层操作系统来说,它只是一个打开的文件描述符。如果您只进行了几次调用,则连接可能会被 gc 丢弃,并且一切看起来都很好。进行压力测试将打开尽可能多的"file",然后抛出此异常。

关于java - 处理对 {}->http ://IP:80: Too many open files 的请求时捕获 I/O 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32684564/

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