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

NET5 Kestrel在负载均衡服务器上频繁生成连接ID日志问题

问题原因
  • 该现象由负载均衡的四层TCP健康检查触发:部署环境的负载均衡器为了确认后端服务存活,会高频向你的.NET 5 REST API节点发送TCP探测请求,这类探测仅完成TCP三次握手建立连接后就立即主动断开,不会发送实际的HTTP业务请求,因此Kestrel会记录完整的连接建立、客户端主动关闭、连接销毁的全流程调试日志,和你贴出的日志特征完全匹配。
  • 本地运行和集群内部部署时没有负载均衡层的高频健康探测流量,因此不会出现该类日志。
解决方案

方案1:调整日志级别过滤无效调试日志(生产环境首选)

生产环境默认不需要开启Kestrel的Debug级日志,直接修改appsettings.Production.json的日志配置,将Kestrel相关日志级别调高到Information及以上即可过滤这类无效日志:

{
  "Logging": {
    "LogLevel": {
      "Microsoft.AspNetCore.Server.Kestrel": "Information",
      "Microsoft.AspNetCore.Server.Kestrel.Sockets": "Information",
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}

该方案无需调整负载均衡和业务代码,对服务运行无任何影响

方案2:配置七层健康检查替换四层TCP探测

在服务中新增专用健康检查接口,修改负载均衡探测规则使用七层HTTP探测,还可以配合长连接配置减少频繁连接创建销毁:

  1. 在服务启动类中注册健康检查服务(Startup.cs/Program.cs):
// .NET 5 写法
services.AddHealthChecks();
  1. 映射健康检查路由:
app.UseEndpoints(endpoints =>
{
    endpoints.MapHealthChecks("/health");
    // 保留原有业务路由配置
});
  1. 修改负载均衡配置,将健康探测调整为GET请求/health路径,同时开启长连接复用,匹配Kestrel的KeepAlive超时配置。

方案3:优化Kestrel连接配置适配负载均衡策略

如果需要保留Debug级日志,仅减少连接创建频率,可以调整Kestrel的长连接参数和负载均衡配置对齐:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureKestrel(options =>
            {
                // 保持超时时间和负载均衡的长连接超时配置一致
                options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
                // 根据实际业务量调整最大并发连接数
                options.Limits.MaxConcurrentConnections = 1000;
            });
            webBuilder.UseStartup<Startup>();
        });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:48:04