netcore保持活动状态超时设置
用.netcore 2.2+创建WebApi项目,服务器为k8s+docker+linux环境。上线初期,由于调用方调用次数较少,会出现这么一个情况,每隔几分钟再次调用,第1次接口都会变慢,继续调用速度又变快了。根据以往的经验,这个情况有点像似 IIS里应用程序池被回收造成的。而.netcore采用kestrel作为边缘服务器,没有应用程序池回收这一说法,但是应该是类似的原因。看官方文档...
·
用.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 是干嘛的吗?
更多推荐
已为社区贡献1条内容
所有评论(0)