IIS重叠回收

摘要:
同时,将创建一个新流程来处理新的Web请求。因为旧进程可以继续接受请求,直到新进程初始化。在旧进程完成当前请求的处理之前,请尝试{FileStreamfs=File.Open(@“C:文件.AppendAllText(@”C:}捕获(Exceptionex){File.AppendAllText(@“C:

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

IIS重叠回收第1张

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

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

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

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

try
{
    FileStream fs = File.Open(@"C:TempwfDLLTestAct.dll", FileMode.Open);
    fs.Close();
    File.AppendAllText(@"C:Tempwfok.txt", "OK");
}
catch(Exception ex)
{
    File.AppendAllText(@"C:Tempwferror.txt", ex.ToString());
}

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

public void get(int id)
{
    FileStream fs = File.Open(@"C:TempwfDLLTestAct.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:WindowsSystem32inetsrv>appcmd list wp
WP "8788" (applicationPool:test1)

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

C:WindowsSystem32inetsrv>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:WindowsSystem32inetsrv>appcmd list wp
WP "15668" (applicationPool:test1)

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

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

C:WindowsSystem32inetsrv>appcmd list wp
WP "4376" (applicationPool:test1)

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

免责声明:文章转载自《IIS重叠回收》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇进程内COM与进程外COMNginx如何对日志文件进行配置?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

GGTalk——C#开源即时通讯系统源码介绍系列(一)

       坦白讲,我们公司其实没啥技术实力,之所以还能不断接到各种项目,全凭我们老板神通广大!要知道他每次的饭局上可都是些什么人物!        但是项目接下一大把,就凭咱哥儿几个的水平,想要独立自主、保质保量保期地一个个做出来,那也是有点难以置信。之前咱也跟老板反映过这个困难,建议他再召两个高手过来。不过领导虽然书读的不多,有一句古训倒是背得特别熟...

IIS自动重启解决方案参考

IIS自动重启解决方案参考 -----源自网络 1.         解决方案一:打上微软red Code(红色代码)补丁 Ø         到microsoft网站上看有关红色代码病毒的告示,然后下载升级包。运行即可。 杀一下毒,也许是红色代码 Ø         我见到过这个现象,打上微软red   code补丁就好了。    视你的OS到微软网站...

iOS之多线程浅谈

1)并发和并行的区别 在软件开发中不可避免的会遇到多线程的问题,在iOS客户端开发(或者.NET的winform或者wpf这样的cs程序)中就更不可避免的会用到多线程,在bs类型的web项目中要考虑一个并发问题,而在这里我们来说一下多线程的并行问题。 首先了解并发和并行的区别: 并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,...

.Net 文件名后缀的详细解释

KeyLife富翁笔记 作者:HongYuan标题: .Net 文件名后缀的详细解释 关键字:分类:个人专区密级: 公开 (评分: , 回复: 0, 阅读: 553) »» .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息。 .csproj:项目文件,创建应用程序所需的引用、数据连接、文件夹和文件的信息。...

多线程和异步委托基础详解

在讲多线程前。先回忆下异步委托:       /*            异步委托自我解释:即用.net委托来自动创建次线程(子线程)以处理异步方法的调用         * 当调用BeginInvoke()方法的时候,程序就会自动创建一个子线程去处理异步委托的方法。         */ //线程被定义为可执行应用程序中的基本执行单元 1 //1:S...

.NET上传大文件的三种解决方案

ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。 ASP.NET页面设计:TextBox和Button按钮。 TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还没有解决,...