.NET 8升级后HttpClientFactory请求响应时长周期性飙升问题咨询
.NET 7升级到.NET 8后HTTP请求响应时长周期性飙升问题
现象概述
- 应用从.NET 7升级到.NET 8后,向内部微服务发起的HTTP请求响应时长出现周期性飙升:从原本的100ms左右升至约1秒,该现象并非每次请求都会发生,每隔几分钟出现一次。
- 升级前后HTTP响应时长对比:

- 周期性飙升现象细节:

- 被调用微服务的指标显示,其所有响应均在1-3ms内完成,说明性能劣化并非由外部服务导致:

环境与升级信息
- 应用部署在AWS Fargate上,分配的CPU和RAM资源未做任何变更。
- 迁移到.NET 8时,底层Docker镜像从
mcr.microsoft.com/dotnet/aspnet:7.0-alpine3.16更换为mcr.microsoft.com/dotnet/aspnet:8.0。 - 此前从.NET 6升级到.NET 7时,使用
aspnet:7.0-alpine3.17镜像也出现过类似问题,降级到aspnet:7.0-alpine3.16后峰值有所减小。
HttpClientFactory使用代码
服务注册代码
builder.Services.AddHttpClient<IExternalClient, ExternalClient>("ExternalClient");
ExternalClient实现代码
public class ExternalClient : IExternalClient { private readonly HttpClient c_httpClient; public ExternalClient( HttpClient httpClient) { this.c_httpClient = httpClient; this.c_httpClient.Timeout = TimeSpan.FromSeconds(2); } public async Task<Response> ExecuteAsync( ClientURL url, Request request) { const string _mediaTypeHeaderValue = "application/json"; var _serialisedRequest = JsonConvert.SerializeObject(request); var _content = new StringContent(_serialisedRequest); _content.Headers.ContentType = new MediaTypeHeaderValue(_mediaTypeHeaderValue); var _responseMessage = await this.c_httpClient.PostAsync(url, _content); var _stringResult = await _responseMessage.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<Response>(_stringResult); } }
控制器调用代码
return await this.c_externalClient.ExecuteAsync(url, request);
咨询问题
- 我们对HttpClientFactory的使用是否正确?
- 是否有人在.NET环境中遇到过类似的周期性响应时长飙升问题?
内容的提问来源于stack exchange,提问作者alanq82
相关产品推荐
相关产品推荐

