在IIS6中,每一個網(wǎng)站都有對應(yīng)的應(yīng)用程序池,在應(yīng)用程序池有運行著網(wǎng)站的Application,在默認(rèn)情況下,所有的網(wǎng)站的應(yīng)用程序都會分配到默認(rèn)的應(yīng)用程序池當(dāng)中, ![]() 當(dāng)然,我們可以新建一個應(yīng)用程序池,然后更改網(wǎng)站所在的應(yīng)用程序池。
添加一個應(yīng)用程序池:
![]() 在網(wǎng)站的屬性的主目錄選項卡下修改網(wǎng)站所在的應(yīng)用程序池:
![]() 查看結(jié)果:
![]() 因為此時默認(rèn)的情況下,所有的網(wǎng)站都在同一個應(yīng)用程序池中,所以它們都會共享同一個w3wp進程,因為在默認(rèn)的應(yīng)用程序池中默認(rèn)設(shè)置的Web園的最大進程數(shù)為1,如圖所示。
![]() 此時我們分別訪問默認(rèn)應(yīng)用程序池中的三個網(wǎng)站,可以看到進程管理器中只有一個w3wp進程在運行,這就驗證了我們上面的提到的結(jié)論。
![]() 我們也可以使用命令行工具來查看運行的工作進程有哪些:
![]() 接著我們來測試一下Web園的使用
首先我們將默認(rèn)應(yīng)用程序池的Web園中最大的工作進程數(shù)設(shè)為5:
![]() 然后,我們對這個應(yīng)用程序池中的3個網(wǎng)站中進行10次訪問,最后我們再次查看工作進程w3wp的數(shù)量:
![]() 從上面的結(jié)果可以看到,修改了Web園之后,對應(yīng)用程序池中的網(wǎng)站進行訪問,最多會生成5個w3wp進程,就是我們在上面設(shè)置的值,此時,這5個w3wp進程就可以將用戶的請求同時進行處。
注意:這里的5個w3wp進程之間是隔離的,所以它們之間的數(shù)據(jù)無法進行共享,例如Session,所以如果一個用戶登錄之后在Session中記錄了他的登錄信息,然后再后面的某次請求中他的請求不再是由原來的w3wp工作進程來處理就會造成用戶掉線的狀況。
接下來我們再次驗證一下上述5個w3wp是否真的是屬于默認(rèn)的那個應(yīng)用程序池的
![]() 因為,運行一段時間后,一個w3wp可能會占用很多的內(nèi)存,所以此時,我們需要對工作進程進行回收,可以應(yīng)用程序池的屬性中對回收的時間進行設(shè)置:
![]() 當(dāng)?shù)竭_回收時間,或者我們手動點擊了回收工作進程之后,IIS會重新創(chuàng)建相同數(shù)量的工作進程,讓新的工作進程來替代舊的工作進程來處理請求,然后結(jié)束原來舊的工作進程。
例如,我們當(dāng)前這個默認(rèn)的應(yīng)用程序池中有5個w3wp進程在同時運行,我們手動進行回收,此時,IIS會創(chuàng)建5個新的w3wp進程來處理請求,然后結(jié)束原來的5個進程,執(zhí)行的過程可以看下面的圖:
![]() 以上是在IIS6中的情況,下面我們來看一下IIS7中的w3wp工作進程:
在IIS7中,我們每次新建一個網(wǎng)站,默認(rèn)的都會創(chuàng)建一個新的應(yīng)用程序池,然后應(yīng)用程序池中會包含我們的應(yīng)用程序
![]() 在應(yīng)用程序池中右鍵查看它的高級設(shè)置可以看到IIS7中的一個應(yīng)用程序池的最大工作進程數(shù)也是1,所以,在一般情況下,我們訪問IIS7上的一個網(wǎng)站,只會產(chǎn)生一個w3wp工作進程,不管請求數(shù)時多少,即有n網(wǎng)站就最多只會有n個w3wp進程。
![]() 當(dāng)我們,修改最大工作進程數(shù)為3時,在多次訪問這個網(wǎng)站時可以發(fā)現(xiàn),結(jié)果與IIS6中相同,最多只會產(chǎn)生3個相應(yīng)的w3wp工作進程。
![]() 從上面可以看到產(chǎn)生的3個工作進程都是屬于t3這個網(wǎng)站的,在IIS7中同樣提供了命令行工具操作IIS,這個工具在IIS7中名稱是
appcmd.exe,它在IIS7的安裝目錄下,一般就在以下的位置:
![]() 使用appcmd監(jiān)測w3wp的回收過程,可以得到與IIS6中相同的結(jié)果:
![]() 如果在運行命令的時候發(fā)生一下的錯誤可能是因為權(quán)限不足的原因,只要右鍵以管理員的身份運行cmd后在執(zhí)行命令即可。
![]() |
|