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> /// 根据名字重启站点.(没重启线程池 ...
随机推荐
- web应急:新闻源网站劫持
新闻源网站一般权重较高,收录快,能够被搜索引擎优先收录,是黑灰产推广引流的必争之地,很容易成为被攻击的对象.被黑以后主要挂的不良信息内容主要是博彩六合彩等赌博类内容,新闻源网站程序无论是自主开发的还是 ...
- Codeforces Round #556 (Div. 1)
Codeforces Round #556 (Div. 1) A. Prefix Sum Primes 给你一堆1,2,你可以任意排序,要求你输出的数列的前缀和中质数个数最大. 发现只有\(2\)是偶 ...
- python爬取豆瓣电影首页超链接
什么是爬虫? 我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链 ...
- SQLServer之行数据转换为列数据
准备工作 创建表 use [test1] go create table [dbo].[student]( ,) not null, ) null, ) null, [score] [int] nul ...
- php 获取文件下的所有文件。php 获取文件下的所有子文件。php 递归获取文件下的所有文件。封装好的方法
//php 获取文件下的所有文件.php 获取文件下的所有子文件.php 递归获取文件下的所有文件.直接上封装好的php代码 <?php //文件路径 $dir = dirname(__FILE ...
- Js判断flash是否被禁用,如果禁用并开启flash
<script> function flashChecker() { ; //是否安装了flash ; //flash版本 if(document.all) { var swf = new ...
- 解决Eclipe安装不上android的ADT的办法
Eclipse,https://dl-ssl.google.com/android/eclipse/安装不上去,ADT在线安装装不了,用离线包又出问题时会不会疯掉. 显然,国内网络和谐掉了google ...
- SharePoint Rest Api Caml multiple condition query -Rest api 利用Caml多个条件查询
$.ajax({ var cquery="<View><Query><Where><And><Geq><FieldRef N ...
- MySQL数据库(二)--库相关操作、表相关操作(1)、存储引擎、数据类型
一.库相关操作 1.创建数据库 (1)语法 create database 数据库 charset utf8; (2)数据库命名规范 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用 ...
- Pods应用NFS存储
Volumes选择NFS服务器: 条件: 1. k8s集群,目前为(hadoop1,hadoop2,hadoop3) 2. 另起一台服务器做专门的NFS服务器 3. NFS需要在K8S的各个节点安装 ...