在IIS应用程序池的高级设置中,有一个“禁用重叠回收”属性,默认值是False。

  重叠回收(Overlapped Recycling),指的是当回收的时候,原来的进程继续处理正在处理的请求,同时一个新的进程被创建来处理新的Web请求。新进程在就旧进程结束之前就启动了,后续的Web请求都由新进程处理。这种机制可以避免延迟,因为旧进程可以继续接受请求直到新进程初始化完成。

  这个也是IIS的默认值,如果禁用这种回收方式,则新请求都会等待,直到旧进程处理完当前请求后释放,新进程启动才能被处理。

  下面实验一下两种设置的效果。

  新建一个简单的Web API项目,在应用程序的初始化类,比如WebApiConfig.Register中加入一段打开一个文件TestAct.dll,然后关闭的代码:

try
{
FileStream fs = File.Open(@"C:\Temp\wf\DLL\TestAct.dll", FileMode.Open);
fs.Close();
File.AppendAllText(@"C:\Temp\wf\ok.txt", "OK");
}
catch(Exception ex)
{
File.AppendAllText(@"C:\Temp\wf\error.txt", ex.ToString());
}

  然后在一个DefaultController中增加一个处理Get请求的方法

public void get(int id)
{
FileStream fs = File.Open(@"C:\Temp\wf\DLL\TestAct.dll", FileMode.Open);
Thread.Sleep(100 * 1000);
fs.Close();
}

  当通过浏览器访问http://localhost:xxxx/api/default/1的时候,就会打开上述的TestAct.dll文件,等待100秒后关闭。

  将上述站点部署到IIS,首先试启用重叠回收的情况。在浏览器中访问http://localhost:xxxx/api/default/1,页面会较长时间处于加载中,使用命令查看当前进程ID是8788。

C:\Windows\System32\inetsrv>appcmd list wp
WP "8788" (applicationPool:test1)

  然后回收应用程序池,再运行上述命令:

C:\Windows\System32\inetsrv>appcmd list wp
WP "7828" (applicationPool:test1)
WP "8788" (applicationPool:test1)

  可以看到有两个进程,多了一个7828。过一段时间(http://localhost:xxxx/api/default/1页面加载完成),再运行这个命令,就只剩7828这个进程了,8788被销毁了。

  禁用重叠回收后,停止应用程序池,然后再启动。访问http://localhost:xxxx/api/default/1,运行命令查看当前IIS工作进程:

C:\Windows\System32\inetsrv>appcmd list wp
WP "15668" (applicationPool:test1)

  这次是一个新的进程15668。然后回收应用程序池,再运行这个命令,发现没有变化,还是这一条记录。

  另开一个浏览器窗口,也访问http://localhost:xxxx/api/default/1,再运行,还是如上。直到第一个窗口加载完毕,然后运行命令才会出现变化:

C:\Windows\System32\inetsrv>appcmd list wp
WP "4376" (applicationPool:test1)

  一个新的进程被创建。如果不开启第二个浏览器,则第一个进程销毁后,不会创建新的进程。

IIS重叠回收的更多相关文章

  1. Web项目Bin目录下的文件改动会引发Application_End事件,IIS会回收线程

    原博文 https://blog.csdn.net/caca95/article/details/85284309 处理方法 Web项目Bin目录下的文件改动会引发Application_End事件, ...

  2. 定时Job在IIS中潜在危险-IIS 定期回收

    引言 有时我们会在IIS中启用一些定时服务,但是你必须清楚IIS会定期回收Asp.net的应用程序的.首先来看IIS啥时候回收APPDomain.   APPDomain 回收时机 There are ...

  3. 解决IIS进程回收后第一次访问慢的问题

    IIS 有一种机制,默认会在IIS空闲一定时间段后,将应用程序池进行回收,这个时间段在IIS6中默认是20分钟,在IIS7中默认是1740分钟.两个配置都不合理,都会导致当应用程序池被回收后,第一次访 ...

  4. IIS进程回收导致定时器失效的一种解决办法

    公司开发的网站使用的.net,网站中用到了定时器,放在Global.asax.cs文件中,但由于IIS设置了网站进程定期回收,回收后定时器也就没了.如果不让进程回收,又担心程序中有内存泄露.有人说可以 ...

  5. IIS 禁止回收

    在IIS中找到这个站点所用的程序池,点击“高级设置...” 在打开的列表中更改以下设置: 回收 ——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存限制(KB) 改为 0 进程模型 ——闲置超时(分 ...

  6. IIS进程回收后第一次访问慢的问题

    IIS 有一种机制,默认会在IIS空闲一定时间段后,将应用程序池进行回收,这个时间段在IIS6中默认是20分钟,在IIS7中默认是1740分钟.两个配置都不合理,都会导致当应用程序池被回收后,第一次访 ...

  7. IIS进程回收 空闲时Net线程未运行

    最近手上的项目,用的是asp.net mvc,后台有个线程在循环接收socket数据,本身在系统运行的时候访问页面没问题,但是发现没访问时,后台没有接收数据,后来知道了是IIS把线程回收了.解决方法如 ...

  8. 解决IIS程序池回收webapi定时程序造成的影响

    问题描述: webapi中有一个定时器线程,在iis程序池在1740分钟回收后,定时器中止 问题解决步骤: 1.设置程序池定期回收,设置每天定时回收 2.在windows自带的任务计划中,添加一条任务 ...

  9. IIS及时回收

    在打开的列表中更改以下设置:回收——固定时间间隔(分钟) 改为 0进程模型——闲置超时(分钟) 改为 0

随机推荐

  1. 机器学习--K折交叉验证和非负矩阵分解

    1.交叉验证 交叉验证(Cross validation),交叉验证用于防止模型过于复杂而引起的过拟合.有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法. 于是可以先在一个子集上做 ...

  2. Libvirt磁盘加密

    Libvirt加密磁盘使用 创建加密磁盘 进入libvirt默认存储池目录 # cd /var/lib/libvirt/images 创建加密磁盘 # qemu-img convert -O qcow ...

  3. python 基于 wordcloud + jieba + matplotlib 生成词云

    词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...

  4. OSD

    OSD(on-Screen Display)屏幕单式调节方式 主要功能是显示一个用户控制界面和一些系统状态信息. 简单点说:OSD技术就是在屏幕的原有图像上面叠加显示相关信息(包括文字.图片等)的技术 ...

  5. C#网络编程学习(5)---Tcp连接中出现的粘包、拆包问题

    本文参考于CSDN博客wxy941011 1.疑问 我们使用第四个博客中的项目. 修改客户端为:连接成功后循环向服务器发送从1-100的数字.看看服务器会不会正常的接收100次数据. 可是我们发现服务 ...

  6. AtCoder Beginner Contest 121 题解

    题目链接:https://atcoder.jp/contests/abc121 A White Cells 分析:题目数据规模很小,直接暴力修改都可以.或者可以推出公式. 代码: #include & ...

  7. python基本数据类型练习

    一.元素分类# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.# 即 ...

  8. Windows开机自动登录及取消自动登录的设置

    开机自动登录 1.开始菜单搜索框输入 “netplwiz” 按回车 或“Win+R”组合键打开“运行”框内输入“netplwiz” 或“运行”框内输入“control userpasswords2”( ...

  9. 跨域和jsonp的了解和学习

    一.为什么会有跨域问题呢 因为有浏览器的同源策略. 同源:如果两个页面的协议,端口(如果有指定)和主机都相同,则两个页面具有相同的源.我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“ ...

  10. js中的focus()聚焦

    document.getElementById("vin").focus();document.form1.name.focus() $(document).ready(funct ...