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

.NET 8升级后HttpClientFactory请求响应时长周期性飙升问题咨询

.NET 7升级到.NET 8后HTTP请求响应时长周期性飙升问题

现象概述

  • 应用从.NET 7升级到.NET 8后,向内部微服务发起的HTTP请求响应时长出现周期性飙升:从原本的100ms左右升至约1秒,该现象并非每次请求都会发生,每隔几分钟出现一次。
  • 升级前后HTTP响应时长对比:
    升级前后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);

咨询问题

  1. 我们对HttpClientFactory的使用是否正确?
  2. 是否有人在.NET环境中遇到过类似的周期性响应时长飙升问题?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:53:39