IIS6与IIS7中的w3wp工作进程
在IIS6中,每一个网站都有对应的应用程序池,在应用程序池有运行着网站的Application,在默认情况下,所有的网站的应用程序都会分配到默认的应用程序池当中,
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003411647-865108009.png)
当然,我们可以新建一个应用程序池,然后更改网站所在的应用程序池。
添加一个应用程序池:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003411881-634922585.png)
在网站的属性的主目录选项卡下修改网站所在的应用程序池:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003412350-714396964.png)
查看结果:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003412709-343153210.png)
因为此时默认的情况下,所有的网站都在同一个应用程序池中,所以它们都会共享同一个w3wp进程,因为在默认的应用程序池中默认设置的Web园的最大进程数为1,如图所示。
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003413194-1553152193.png)
此时我们分别访问默认应用程序池中的三个网站,可以看到进程管理器中只有一个w3wp进程在运行,这就验证了我们上面的提到的结论。
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003413569-931328492.png)
我们也可以使用命令行工具来查看运行的工作进程有哪些:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003414022-1834418051.png)
接着我们来测试一下Web园的使用
首先我们将默认应用程序池的Web园中最大的工作进程数设为5:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003414553-662671987.png)
然后,我们对这个应用程序池中的3个网站中进行10次访问,最后我们再次查看工作进程w3wp的数量:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003414975-1703939883.png)
从上面的结果可以看到,修改了Web园之后,对应用程序池中的网站进行访问,最多会生成5个w3wp进程,就是我们在上面设置的值,此时,这5个w3wp进程就可以将用户的请求同时进行处。
注意:这里的5个w3wp进程之间是隔离的,所以它们之间的数据无法进行共享,例如Session,所以如果一个用户登录之后在Session中记录了他的登录信息,然后再后面的某次请求中他的请求不再是由原来的w3wp工作进程来处理就会造成用户掉线的状况。
接下来我们再次验证一下上述5个w3wp是否真的是属于默认的那个应用程序池的
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003415381-2019364281.png)
因为,运行一段时间后,一个w3wp可能会占用很多的内存,所以此时,我们需要对工作进程进行回收,可以应用程序池的属性中对回收的时间进行设置:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003415788-945977967.png)
当到达回收时间,或者我们手动点击了回收工作进程之后,IIS会重新创建相同数量的工作进程,让新的工作进程来替代旧的工作进程来处理请求,然后结束原来旧的工作进程。
例如,我们当前这个默认的应用程序池中有5个w3wp进程在同时运行,我们手动进行回收,此时,IIS会创建5个新的w3wp进程来处理请求,然后结束原来的5个进程,执行的过程可以看下面的图:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003416147-1031643012.png)
以上是在IIS6中的情况,下面我们来看一下IIS7中的w3wp工作进程:
在IIS7中,我们每次新建一个网站,默认的都会创建一个新的应用程序池,然后应用程序池中会包含我们的应用程序
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003416506-859602297.png)
在应用程序池中右键查看它的高级设置可以看到IIS7中的一个应用程序池的最大工作进程数也是1,所以,在一般情况下,我们访问IIS7上的一个网站,只会产生一个w3wp工作进程,不管请求数时多少,即有n网站就最多只会有n个w3wp进程。
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003416928-1857036300.png)
当我们,修改最大工作进程数为3时,在多次访问这个网站时可以发现,结果与IIS6中相同,最多只会产生3个相应的w3wp工作进程。
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003417350-686396804.png)
从上面可以看到产生的3个工作进程都是属于t3这个网站的,在IIS7中同样提供了命令行工具操作IIS,这个工具在IIS7中名称是
appcmd.exe,它在IIS7的安装目录下,一般就在以下的位置:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003417678-1445252851.png)
使用appcmd监测w3wp的回收过程,可以得到与IIS6中相同的结果:
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003418241-1691584268.png)
如果在运行命令的时候发生一下的错误可能是因为权限不足的原因,只要右键以管理员的身份运行cmd后在执行命令即可。
![](https://images2015.cnblogs.com/blog/846715/201605/846715-20160529003418631-1847392075.png)
作者: 陌上荼靡