You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用httpcomponents-client-5.2.x遇响应少及DeadlineTimeoutException问题求助

HttpAsyncClient高吞吐量调用异常排查

环境与依赖

  • 使用组件版本:Apache HttpComponents Client 5.2.3
  • 依赖坐标:org.apache.httpcomponents.client5:httpclient5:5.2.3
  • Java环境:17.0.8(Red Hat OpenJDK,运行路径:D:\unzipped\java-17-openjdk-17.0.8.0.7-1.win.x86_64)

测试场景

搭建小型Spring REST回声控制器,通过多线程并发发送请求,每个线程中连续两次请求间隔1毫秒。

异常现象

  1. 初始阶段响应量远低于请求量,核心统计示例如下:
Thu Mar 14 00:12:44 IST 2024 Stats-sent:10
Thu Mar 14 00:12:44 IST 2024 Stats-success:0
Thu Mar 14 00:12:44 IST 2024 Stats-failure:0
totalStats [leased: 0; pending: 0; available: 0; max: 5000]
Number of routes []
Thu Mar 14 00:12:49 IST 2024 Stats-sent:8740
Thu Mar 14 00:12:49 IST 2024 Stats-success:192
Thu Mar 14 00:12:49 IST 2024 Stats-failure:0
totalStats [leased: 5; pending: 8517; available: 0; max: 5000]
Number of routes [{}->http://172.18.17.74:8093]
Thu Mar 14 00:12:54 IST 2024 Stats-sent:12818
Thu Mar 14 00:12:54 IST 2024 Stats-success:432
Thu Mar 14 00:12:54 IST 2024 Stats-failure:0
totalStats [leased: 5; pending: 12359; available: 0; max: 5000]
Number of routes [{}->http://172.18.17.74:8093]
Thu Mar 14 00:12:59 IST 2024 Stats-sent:15900
Thu Mar 14 00:12:59 IST 2024 Stats-success:660
Thu Mar 14 00:12:59 IST 2024 Stats-failure:0
totalStats [leased: 5; pending: 15204; available: 0; max: 5000]
  1. 运行一段时间后持续抛出超时异常:
DeadlineTimeoutException: Deadline: 2024-03-13T17:46:18.758+0000, -10847 MILLISECONDS overdue

选择5.2.3版本的原因是该版本已修复同类超时异常问题。

当前客户端配置代码

final int MAX_CONN_PER_ROUTE = Integer.getInteger("max.conn.per.route", 500);
final int MAX_CONN_TOTAL = Integer.parseInt(System.getProperty("max.conn.total", "5000"));

final Resolver<HttpRoute, ConnectionConfig> connectionConfigResolver = route -> { 
                return ConnectionConfig.custom().setConnectTimeout(Timeout.ofSeconds(2 * 60))
            .setSocketTimeout(Timeout.ofSeconds(2 * 60)).setValidateAfterInactivity(Timeout.ofSeconds(1))
            .setTimeToLive( TimeValue.of(1, TimeUnit.MINUTES)).build();
};


final PoolingAsyncClientConnectionManager cm = PoolingAsyncClientConnectionManagerBuilder.create() 
.setConnectionConfigResolver(connectionConfigResolver)
.setTlsConfigResolver(tlsConfigResolver)
.setMaxConnPerRoute(MAX_CONN_PER_ROUTE)
.setMaxConnTotal(MAX_CONN_TOTAL)
.build();
cm.setDefaultMaxPerRoute(Integer.getInteger("client5.PoolingMaxConnectionSize", 5));
final HttpAsyncClientBuilder clientBuilder = HttpAsyncClients.custom().setConnectionManager(cm);
final IOReactorConfig ioReactor = IOReactorConfig.DEFAULT;
IOReactorConfig.Builder builder = IOReactorConfig.copy(ioReactor);

final Integer count = Integer.getInteger("client5.IOThreadCount", Runtime.getRuntime().availableProcessors());
builder.setIoThreadCount(count);
builder.setSelectInterval(TimeValue.of(2, TimeUnit.MILLISECONDS));
//      builder.setSoReuseAddress(true);
clientBuilder.setIOReactorConfig(builder.build());

CloseableHttpAsyncClient closeableHttpAsyncClient = clientBuilder.build();
closeableHttpAsyncClient.start(); 

核心诉求

排查当前配置或代码中的错误,定位导致请求积压、响应延迟及超时异常的原因。

内容的提问来源于stack exchange,提问作者lab bhattacharjee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:24:53