zoukankan      html  css  js  c++  java
  • 正确规避容器自动回收释放资源

    场景:服务发布至容器成功运行起来,多一段时间再访问时可能会出现服务已被回收,导致服务停止。

    场景分析:假设我们的目标是希望服务可以持续运行不中断。这里我们用 IIS 举例,在 IIS 中有两参数会触发回收导致场景。“固定时间间隔(分钟)” 与 ”闲置超时(分钟)“。

    固定时间间隔(分钟):超过设置的时间后,应用程序池回收,为0时应用程序池不会按固定间隔回收。系统默认设置时间是1740(29小时)。

    闲置超时(分钟):超过设置的时间后,应用程序池回收。为0时则不会出现限制超时回收。系统默认设置时间是20分钟。

    弄清楚自动回收的原因,我们就可以通过修改配置来规避,当然也可以通过编码解决。

    编码解决方案:可以通过在服务启动时,启动一个线程每隔10分钟请求一次自己。时间必须小于自动回收时间,这样就等于持续被访问。

    最近一次实现是通过自动任务每格十分钟触发一次请求。

    /// <summary>
    /// 保持服务持续运行,不被自动回收
    /// </summary>
    public class KeepLiveWorker : PeriodicBackgroundWorkerBase, ISingletonDependency
    {
        private readonly IConfigurationRoot configuration;
    
        public KeepLiveWorker(AbpTimer timer, IHostingEnvironment env) : base(timer)
        {
            configuration = env.GetAppConfiguration();
            Timer.Period = 600000; //10分钟一次轮询
            //Timer.Period = 10000;
        }
    
        protected override void DoWork()
        {
            Knock();
        }
    
        /// <summary>保留请求信息</summary>
        public void Knock()
        {
            var request = new RestRequest("/api/TokenAuth/Knock", Method.GET);
            var client = new RestClient(configuration["App:ServerRootAddress"]);
            var response = client.Execute(request);
        }
    }
    
  • 相关阅读:
    JS深度判断两个数组对象字段相同
    box-shadow inset
    swiper实现滑动到某页锁住不让滑动
    vuex上手文章参考
    js基础补漏
    react学习文章
    C# .Net String字符串效率提高-字符串拼接
    JS,Jquery获取各种屏幕的宽度和高度
    highcharts的dataLabels如何去处阴影
    .net C# 抽奖,中奖
  • 原文地址:https://www.cnblogs.com/fxck/p/13076483.html
Copyright © 2011-2022 走看看