有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

httpclient java。网SocketException:将json负载发布到rest api时管道破裂(写入失败)

获取java。网SocketException:在发送大小为3.2MB的json有效负载时,管道破裂(写入失败),但它是间歇性的。然而,对于小尺寸,这是可行的。代码正在jetty服务器上运行

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

此外,我们还尝试在jetty服务器上修改下面的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多天了。如果你需要更多的信息,请告诉我


共 (1) 个答案

  1. # 1 楼答案

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

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

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

    只需在第行下方添加标题即可:

    标题。添加(新的BasicHeader(HttpHeaders.CONNECTION,“close”)