Web中线程与IIS线程池自动回收机制
开发Web项目后,部署到 IIS上 ,运行一直稳定,当Web程序中加入了定时任务,或者线程之类的机制后,第二天发现悲催了,定时任务并没有执行,此时重新登录一下网站,定时任务又重新执行。原来IIS默认有回收线程池机制,当网站一段时间没有人访问时,会自动回收,项目中的线程、进程自然而然就被终止掉了。而以前类似于定时任务,线程之类的都是用控制台程序写,然后打包成服务运行在Windows上,只要服务不终止,里面的线程就会一直运行下去,不会存在所谓的运行一段时间就被回收的情况。晚上搜索了解决线程池回收问题,主流方案是修改IIS 程序池的默认设置,将 固定时间间隔设置0,闲置超时设为0 ,即对此IIS项目不进行回收,也就不存在定时任务,线程程序被终止的情况。对 IIS 详细的参数一知半解,这次补习了一下功课,有时候IIS参数的设置 也是对程序的一种有效优化.

要知道,IIS自动回收相当于服务器IIS重启,应用程序池内存清空,所有数据被清除,相当于IIS重启,如果手动进行干预,使IIS程序不再进行回收,久而久之,可能会使程序运行变慢, 甚至会内存溢出,总归是心有不安。反过来想,担心程序自动回收后,线程之类的会被终止,此时只有重新登录网站,线程才会自动去运行。也就是说,如果在程序池回收后保证运行一次网站的运行就可。说白了就是回收后进行一次URL的请求,线程池回收后会进入 Application_End ,那么将访问URL的方法写入到Application_End 中即可。如下图所示
protected void Application_End(object sender, EventArgs e)
{
//写进日志队列
LogHelper.InfoLogQueue.Enqueue("Application_End");
Thread.Sleep();
//这里设置你的web地址,可以随便指向你的任意一个aspx页面,激发Application_Start
string url = "http://Home/Update";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
}
也就是说,程序池回收后去请求了一次URL,首先会进入到 Application_Start 方法中,则在此方法中加入 定时任务,线程之类的操作就很合适,试想,程序池回收后,定时任务线程终止,然后去请求一次URL,线程开启,如此往复
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); //开启日志
LogHelper Log = new LogHelper();
Log.Process();
//开始记录
LogHelper.InfoLogQueue.Enqueue("Application_Start");
//开启定时任务
AutoTask();
}
对于以前接手的 web 程序中,使用线程之类的很少用到, 像线程、定时任务多用控制台程序包装成服务,但是也保不齐有Web中用到,这里记录一下
Web中线程与IIS线程池自动回收机制的更多相关文章
- IIS线程池与ASP.NET线程池
原文地址:http://www.cnblogs.com/dudu/p/3762672.html 1. IIS线程池 W3 Thread Pool(W3TP) 当处于内核模式的http.sys接收到来自 ...
- Java 中的几种线程池,你之前用对了吗
好久不发文章了,难道是因为忙,其实是因为懒.这是一篇关于线程池使用和基本原理的科普水文,如果你经常用到线程池,不知道你的用法标准不标准,是否有隐藏的 OOM 风险.不经常用线程池的同学,还有对几种线程 ...
- 转:专题三线程池中的I/O线程
上一篇文章主要介绍了如何利用线程池中的工作者线程来实现多线程,使多个线程可以并发地工作,从而高效率地使用系统资源.在这篇文章中将介绍如何用线程池中的I/O线程来执行I/O操作,希望对大家有所帮助. 目 ...
- Java 中的几种线程池这么用才是对的
为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下.其实归根结底最主要的一个原因就是为了提高性能. 线程池和数据库连接池是同样的道理,数据库连接池是为了减少连接建立和释放带来的性能开销.而线 ...
- C#线程学习笔记三:线程池中的I/O线程
本笔记摘抄自:https://www.cnblogs.com/zhili/archive/2012/07/20/MultiThreads.html,记录一下学习过程以备后续查用. 一.I/O线 ...
- 浅谈线程池(中):独立线程池的作用及IO线程池
原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...
- .net重启iis线程池和iis站点程序代码【转】
转:http://www.jb51.net/article/44162.htm 重启站点: 复制代码代码如下: /// <summary> /// 根据名字重启站点.(没重 ...
- .net重启iis线程池和iis站点程序代码分享
重启站点: /// <summary> /// 根据名字重启站点.(没重启线程池) /// </summary> /// <param name="sitena ...
- 重启iis线程池和iis站点
服务器监控. 一定时间内或者iis异常,就重启线程池和站点 一般重启站点没啥用.. 重启线程池 效果明显. 重启站点: /// <summary> /// 根据名字重启站点.(没重启线程池 ...
随机推荐
- Why React Is Favored by Front-End Specialists
In this section, we will discuss some of the features that make React a superior choice for front-en ...
- 2019-11-29-C#-直接创建多个类和使用反射创建类的性能
原文:2019-11-29-C#-直接创建多个类和使用反射创建类的性能 title author date CreateTime categories C# 直接创建多个类和使用反射创建类的性能 li ...
- SQLServer之行数据转换为列数据
准备工作 创建表 use [test1] go create table [dbo].[student]( ,) not null, ) null, ) null, [score] [int] nul ...
- wsl中的git问题
当使用wsl打开Windows下的仓库时可能会出现所有文件都被标记为modified,这时一般有两种情况. 文件权限问题 由于wsl申请对文件的读写权限导致文件的权限发生改变.这时只需修改git的设置 ...
- 开发技术--Numpy模块
开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...
- Python渗透测试工具库
漏洞及渗透练习平台 WebGoat漏洞练习平台: https://github.com/WebGoat/WebGoat webgoat-legacy漏洞练习平台: https://github.com ...
- Qt QVector简单用法
添加元素 QVector<QString> strArray; strArray.append("Hello"); 遍历 QVector<QString>: ...
- 个人项目 python实现
一. github地址:https://github.com/zjh1234562/WC 二 . PSP表格 PSP2.1 Personal Software Process Stages 预估耗时 ...
- Linux的基本指令-Linux从入门到精通第二天(非原创)
文章大纲 一.指令与选项二.基础指令(重点)三.进阶指令(重点)四.学习资料下载五.参考文章 一.指令与选项 什么是Linux的指令?指在Linux终端(命令行)中输入的内容就称之为指令. 一 ...
- sqlalchemy相关操作(ORM)
环境:python3.7,pycharm,mysql ORM(Object-Relational-Mapper) 对象关系映射(ORM)是一种允许您使用面向对象的范例从数据库查询和操作数据的技术,sq ...