首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理对{}http://IP:80:的请求时捕获的I/O异常太多打开的文件

处理对{}http://IP:80:的请求时捕获的I/O异常太多打开的文件
EN

Stack Overflow用户
提问于 2015-09-20 21:37:35
回答 1查看 3.8K关注 0票数 0

我有一个体系结构,3个系统:

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

我在后端和中间件之间有rest web服务,在前端和中间件之间还有另一个不同的rest服务(如下面的图像所示)。

如上图所示,客户端调用中间件,中间件调用后端rest服务。

现在,当我运行几个请求时,一切正常,但是当我开始从客户端进行压力测试(我使用JMeter进行测试并调用中间件服务)时,我开始收到这个异常。

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

代码语言:javascript
运行
复制
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;
    }

请有人告诉我中间件或后端的问题在哪里,为什么会发生?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-20 21:43:35

您不能关闭客户端http-连接。尝试:

代码语言:javascript
运行
复制
...
 }
            System.out.println("response1: "+ response1);

            client.close();

            return response1;
...

异常显示,当尝试打开新的http连接时会发生错误。请记住,尽管它是一个网络连接,但对于底层操作系统来说,它只是一个打开的文件描述符。如果您只打了几次电话,这个连接可能会被gc丢弃,而且一切看起来都很好。做压力测试会打开尽可能多的“文件”,然后抛出这个异常。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32684564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档