.NET 7 HttpClient每6分钟出现请求响应延迟问题求助
HTTP请求每6分钟出现一次高耗时峰值的问题排查
问题描述
我们遇到了HTTP请求的异常耗时问题:每6分钟会出现一次耗时高达162ms的请求,而这类请求的平均耗时仅为7ms。
测试环境与场景:
- 本地运行K6脚本,以36次/分钟的频率调用部署在AWS ECS实例上的服务控制器
- 只要保持该请求速率,这种慢响应模式就会持续存在
- 当K6请求发送速率提高时,
requestduration指标的峰值会变得不明显
已完成的排查动作:
- 对被调用的API控制器做了指标监控,其平均耗时仅2ms,可排除控制器本身的问题
- 最初怀疑是
PooledConnectionIdleTimeout导致,但我们使用的是.NET 7,该参数默认值为1分钟,与6分钟的周期不匹配 - 基础设施层面未发现会导致此类峰值的因素
指标图表

相关代码
HttpClient注册
_builder.Services.AddHttpClient<IHttpClient, HttpClient>();
HttpClient实现
public class HttpClient : IHttpClient { private readonly Metric.Client.IRecorder c_metrics; private readonly System.Net.Http.HttpClient c_httpClient; public HttpClient( Metric.Client.IRecorder metrics, System.Net.Http.HttpClient httpClient) { this.c_httpClient = httpClient; } public async Task<HttpResponseMessage> GetAsync( string requestUrl, string correlationId) { using (var _request = new HttpRequestMessage(HttpMethod.Get, requestUrl)) { _request.Headers.Add("X-CorrelationId", correlationId); using var _timer = this.c_metrics.StartTimer("requestduration"); return await this.c_httpClient.SendAsync(_request); } } }
控制器使用代码
public Controller( IHttpClient httpClient) { this.c_httpClient = httpClient; } public async Task<IActionResult> GetAsync( [FromQuery] Request request) { var _privateResponse = await this.c_httpClient.GetAsync(_requestUrl, _correlationId); if (_privateResponse.StatusCode != HttpStatusCode.OK) { return StatusCode(500, new Error(Guid.Parse(_correlationId), "Internal server error")); } var _privateResponseContent = await _privateResponse.Content.ReadAsStringAsync(); return Ok(JsonSerializer.Deserialize<Response>(_privateResponseContent)); }
提问
是否有人遇到过类似的HTTP请求行为?上述代码是否存在可能导致该问题的隐患?
内容的提问来源于stack exchange,提问作者Alan Mulligan
相关产品推荐
相关产品推荐

