netcore保持活动状态超时设置

用.netcore 2.2+ 创建WebApi项目,服务器为k8s+docker+linux环境。

上线初期,由于调用方调用次数较少,会出现这么一个情况,每隔几分钟再次调用,第1次接口都会变慢,继续调用速度又变快了。根据以往的经验,这个情况有点像似 IIS里应用程序池被回收造成的。而.netcore采用kestrel作为边缘服务器,没有应用程序池回收这一说法,但是应该是类似的原因。

看官方文档,发现Kestrel有个选项属性 “保持活动状态超时”,即为KeepAliveTimeout  ,默认为2分钟,项目的这个情况是否是这个 选项造成的呢?根据官方文档,修改代码,将

保持活动状态超时 KeepAliveTimeout  设置为10分钟试一试。

 代码如下:

在Program.cs里

public class Program
    {
        public static void Main(string[] args)
        {
             System.Threading.ThreadPool.SetMinThreads(200, 200); 
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args).
            ConfigureLogging((context, loggingbuilder) =>
            {
                //该方法需要引入Microsoft.Extensions.Logging名称空间

                loggingbuilder.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
                loggingbuilder.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
                //var path = Directory.GetCurrentDirectory() + "\\log4net.config"; 
                //不带参数:表示log4net.config的配置文件就在应用程序根目录下,也可以指定配置文件的路径
                loggingbuilder.SetMinimumLevel(LogLevel.Debug);
                loggingbuilder.AddLog4Net("Config/log4net.config");
            })
              .UseStartup()
            .ConfigureKestrel((context, serverOptions) =>
              {
                  //为整个应用设置并发打开的最大 TCP 连接数,默认情况下,最大连接数不受限制 (NULL)
                  serverOptions.Limits.MaxConcurrentConnections = 100;
                  //对于已从 HTTP 或 HTTPS 升级到另一个协议(例如,Websocket 请求)的连接,有一个单独的限制。 连接升级后,不会计入 MaxConcurrentConnections 限制
                  serverOptions.Limits.MaxConcurrentUpgradedConnections = 100; 
                  //获取或设置保持活动状态超时。 默认值为 2 分钟。
                  serverOptions.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10);
                //  serverOptions.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(1);
              });
    }

测试下来,感觉不怎么管用。有谁能知道这个 KeepAliveTimeout  是干嘛的吗?

你可能感兴趣的:(netcore保持活动状态超时设置)