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 楼答案
在读了很多文章之后。现在,我找到了解决问题的办法。这是由于:
我在这里找到了一篇有用的文章: https://blog.stackpath.com/glossary-keep-alive/
只需在第行下方添加标题即可:
标题。添加(新的BasicHeader(HttpHeaders.CONNECTION,“close”)