【发布时间】: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