• 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<Startup>()
                .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  是干嘛的吗?

  • 相关阅读:
    查找代码中的中文
    C# 清除cookies
    C# 32位程序在64位系统下注册表操作
    C# 32位程序在64位系统下运行中解决重定向问题
    C# 把一个文件夹下所有文件删除
    C# 把一个文件夹下所有文件复制到另一个文件夹下
    chromium浏览器开发系列第五篇:Debugging with WinDBG
    chromium浏览器开发系列第四篇:如何调试最新chromium源码
    chromium浏览器开发系列第三篇:chromium源码目录结构
    chromium浏览器高级开发系列第二篇:如何编译最新chromium源码
  • 原文地址:https://www.cnblogs.com/puzi0315/p/12161676.html
Copyright © 2020-2023  润新知