IIS 6.0 應用了新的進程模型。內核模式的HTTP偵聽程序(Http.sys)接收并發送HTTP請求(甚至可以使用它的響應緩存來滿足請求)。工作進程注冊URL子空間,Http.sys將請求發送到相應的進程(如果使用應用程序池,則發送到進程集合)。
圖 4 展示了IIS 5.0和IIS 6.0進程模型之間的差異。IIS 5.0使用WinSock在端口80接受連接。請求由 inetinfo 進程負責接收,然后或者在進程內執行請求,或者將它交給dllhost 進程在進程外進行處理(為了達到隔離的目的)。響應則由 inetinfo 進程發送回去。
IIS 5.0 和 IIS 6.0 的進程模型
IIS 6.0 進程依賴于內核模式的Web驅動程序Http.sys。在新的模型中,Http.sys負責管理連接和處理請求。請求可能通過Http.sys緩存得到滿足,也可能被交給一個工作進程以便得到進一步處理(見圖5)。可以配置多個工作進程,從而以較低開銷實現了隔離。
Http.sys包括了一個響應緩存。當請求與響應緩存中的某個條目相匹配的時候,Http.sys直接從內核模式中發送緩存響應。圖5展示了請求通過Http.sys得到處理的情況(請求也可能向上交給某個工作進程進行處理)。
IIS 6.0中的請求處理
由于Web服務器既包括內核模式的組件,也包括用戶模式的組件,必須對二者同時進行調整才能獲得最佳性能。因此,針對特定負載的IIS 6.0調整工作需要對如下內容進行配置:
· Http.sys(內核模式驅動程序)以及相關的內核模式緩存。
· 工作進程和用戶模式IIS,包括應用程序池配置。
此外,我們還將在后文中討論會對性能造成影響的其他參數。
與性能有關的Http.sys設置可以劃分為兩類:緩存管理以及連接和請求管理。所有的注冊表設置都保存在以下條目中:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesHttpParameters
如果HTTP服務正在運行,必須首先停止服務,然后重新啟動計算機,以便讓設置生效。
緩存管理設置
Http.sys具有的優點之一便是內核模式緩存。如果響應位于內核緩存中,那么可能可以完全通過內核模式來滿足某個HTTP請求,這顯然可以極大降低CPU處理請求的開銷。但是,IIS 6.0的內核模式緩存是一種基于物理內存的緩存,每個條目都需要占用一定的內存空間。
緩存中的條目只有在被使用的時候才能提供益處。但是,條目在任何時候都會占用物理內存,不論它是否被使用。所以,需要對緩存某個項目帶來的益處(能夠直接從緩存中滿足請求)以及它在整個生命期中的開銷(需要占用物理內存)進行評估,并且考慮可用資源(CPU、物理內存)和工作負載的情況。Http.sys 試圖僅在緩存中保存有用(經常被訪問)的項目,但是,如果針對特定工作負載來調整Http.sys緩存,Web服務器的性能還可以獲得一定程度的提高。
以下是一些有用的Http.sys內核模式緩存設置:
· UriEnableCache. 默認值:1。設為非零值可以啟用內核模式響應和分段緩存。對于大多數工作負載,緩存都應該保持啟用。如果希望獲得超低響應和較低的緩存利用率,那么請考慮禁用緩存。
· UriMaxCacheMegabyteCount. 默認值:0。設為非零值可以指定內核緩存可以使用的最大內存數量。默認值為0,允許系統自動調節緩存能夠使用的內存數量。注意:只能設置可以使用的最大內存數量,而且系統可能不允許緩存增長到指定的大小。
· UriMaxUriBytes. 默認值:262144 字節(256 KB)。本參數設定了內核緩存中每個條目的最大長度。大于這個長度的響應或分段都不會被緩存。如果有足夠的資金,可以考慮增加此參數的值。如果資金有限,而且大型的條目會擠掉較小的條目,那么可以將本參數設為更小的值。