【问题标题】:java.net.SocketException: Broken pipe (Write failed) while posting json payload to rest apijava.net.SocketException:将json有效负载发布到rest api时管道损坏(写入失败)
【发布时间】:2019-11-26 17:20:33
【问题描述】:

获取 java.net.SocketException: Broken pipe (Write failed),同时发送大小为 3.2 mb 的 json 有效负载,但它是间歇性的。但是对于小尺寸,它正在工作。代码在码头服务器上运行。

我认为升级服务器内存后可能存在内存问题,堆大小约为 7GB,并在运行此作业时验证内存和 cpu 利用率正常,但仍然失败。

我们还尝试在码头服务器上修改以下 sysctl 设置,但有时仍然没有运气成功处理,但从几天开始它一直失败。

   sysctl -w net.core.rmem_max=16777216  sysctl -w
   net.core.wmem_max=16777216  sysctl -w net.ipv4.tcp_rmem="4096 87380
   16777216"  sysctl -w net.ipv4.tcp_wmem="4096 16384 16777216"   sysctl
   -w net.core.somaxconn=4096   sysctl -w net.core.netdev_max_backlog=16384  sysctl -w net.ipv4.tcp_max_syn_backlog=8192 

下面是我们用来调用rest api的代码:

   RestClient restTemplate = null;
   HttpEntity<String> entity = new HttpEntity<String>(payload, headers);
   ResponseEntity<String> responseEntity = null;try
    {
        restTemplate = new RestClient(null, null, accessKey, secretKey);
        responseEntity = restTemplate.exchange(url, method, entity, String.class);
        return responseEntity;
    }catch(
    Exception ex)
    {

    }

    // contructor setting
    public RestClient(final String proxyHost, final String proxyPort, final String username, final String password) {
        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider.setCredentials(new AuthScope(null, -1), new UsernamePasswordCredentials(username, password));
        HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build();
        setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient));
    }

知道如何解决这个问题,我已经苦苦挣扎了 20 多天。如果您需要更多输入,请告诉我。

【问题讨论】:

    标签: java httpclient


    【解决方案1】:

    在浏览了很多文章之后。现在,我找到了解决问题的方法。这是由于:

    • 最常见的情况是,在另一端已经关闭连接时写入连接;
    • 通常情况下,对等方关闭连接而不读取其端已经挂起的所有数据。

    我在这里找到了一篇有用的文章: https://blog.stackpath.com/glossary-keep-alive/

    只有在下面的行中添加标题才能工作:

    headers.add(new BasicHeader(HttpHeaders.CONNECTION,"close"));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-13
      • 2011-03-19
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2011-01-19
      相关资源
      最近更新 更多