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);
        }
    }
    
  • 相关阅读:
    20191005
    20191004-gugugu公告
    20191003
    10.2 一天
    考试总结 模拟$105$
    考试总结 模拟$104$
    考试总结 模拟$103$
    考试总结 模拟$102$
    考试总结 模拟$101$
    考试总结 模拟$100$
  • 原文地址:https://www.cnblogs.com/fxck/p/13076483.html
Copyright © 2011-2022 走看看