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);
        }
    }
    
  • 相关阅读:
    Laravel 初始化
    ant design pro 左上角 logo 修改
    请求到服务端后是怎么处理的
    Websocket 知识点
    王道数据结构 (7) KMP 算法
    王道数据结构 (6) 简单的模式匹配算法
    王道数据结构 (4) 单链表 删除节点
    王道数据结构 (3) 单链表 插入节点
    王道数据结构 (2) 单链表 尾插法
    王道数据结构 (1) 单链表 头插法
  • 原文地址:https://www.cnblogs.com/fxck/p/13076483.html
Copyright © 2011-2022 走看看