• IIS重叠回收


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

      重叠回收(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)
    

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

  • 相关阅读:
    Laravel使用Eloquent ORM操作数据库
    Laravel查询构造器的使用方法整理
    [wordpress]后台自定义菜单字段和使用wordpress color picker
    Thinkphp kindeditor 内容转义
    WordPress 后台提示输入FTP信息
    [记录]gulp compass
    symonfy 项目根目录下没有 bin/console 文件的解决方法
    [gulp] gulp lint 忽略文件
    [转载]ubuntu Atheros Communications Device 1083 驱动
    SharpDevelop 编译时,任务失败,因为未找到“resgen.exe”的解决方法
  • 原文地址:https://www.cnblogs.com/wangguanguo/p/8485871.html
Copyright © 2020-2023  润新知