在Windows Server的老版本 IIS 中已經包含 CPU 節流功能,並且也有不錯的體現,但是作為微軟重磅推出的Windows Server 2012,似乎嚴格的追求了產品的高性能, IIS 8.0 的功能也進行了很大的改進。具體的改進體現在什麼地方,我們一起來看一下。
在老版本 IIS 中,通過輪詢機制定期檢查 CPU 用量,如果用量超出阈值足夠長的時間就會采取對應的操作。這種方法的問題在於,CPU 用量並不能真正受到限制——用量可能會遠超配置的限制,並在足夠長的時間內維持高位,隨後輪詢機制才會注意到。如果發現 CPU 用量超過阈值,唯一可用的“修正”操作就是關閉 IIS 工作進程(W3pw.exe)。當進程被關閉後的一段時間內,IIS 還會禁止被影響應用程序啟動新的進程,因此該應用程序池不會立刻恢復,並繼續消耗大量 CPU 資源。在這段時間內,對該應用程序的任何請求都將失敗,這將造成很不好的用戶體驗。
在 IIS 8.0 中,我們與 Windows 內核團隊合作完善了 CPU 用量的節流機制。通過取代古老的輪詢機制設計方式,內核可以確保 CPU 用量總是維持在指定級別以下。通過這一改動,我們不再需要關閉超量應用程序的 W3Wp 進程,因此就算被限制,應用程序可以保持活躍,並繼續響應用戶的請求。
對於 IIS 8.0 中 CPU 節流機制,還有兩個新的選項。Throttle 配置選項可以確保 CPU 用量在所有時間內都能不超過限制。ThrottleUnderLoad 配置選項則可以確保 CPU 資源使用率高時,CPU 用量能夠不超過限制,但如果服務器閒置,則可以消耗更多 CPU 資源。在這種模式中,一旦其他進程需要更多 CPU 資源,IIS 工作進程就會受到限制,以確保其他進程能夠獲得所需資源。