共用方式為


調整 IIS 10.0

Windows Server 2022 隨附 Internet Information Services (IIS) 10.0。 其使用與 IIS 8.5 和 IIS 7.0 類似的程序模型。 核心模式 Web 驅動程式 (http.sys) 會接收和路由傳送 HTTP 要求,並滿足來自其回應快取的要求。 背景工作程序會註冊 URL 子空間,而 http.sys 會將要求路由傳送至適當的程序 (或應用程式集區的程序集)。

HTTP.sys 負責連線管理和要求處理。 您可以從 HTTP.sys 快取處理要求,或將其傳遞至背景工作程序以進行進一步處理。 您可以設定多個背景工作程序,以降低的成本來提供隔離。 如需要求處理運作方式的詳細資訊,請參閱下圖:

request handling in iis 10.0

HTTP.sys 包括回應快取。 要求符合回應快取中的項目時,HTTP.sys 會直接從核心模式傳送快取回應。 某些 Web 應用程式平台 (例如 ASP.NET) 會提供機制,以將任何動態內容快取至核心模式快取。 IIS 10.0 中的靜態檔案處理常式會自動快取 http.sys 中經常要求的檔案。

因為網頁伺服器具有核心模式和使用者模式元件,所以必須調整這兩個元件才能獲得最佳效能。 因此,針對特定工作負載調整 IIS 10.0 包括設定下列項目:

  • HTTP.sys 和相關聯的核心模式快取

  • 背景工作程序和使用者模式 IIS,包括應用程式集區設定

  • 會影響效能的特定調整參數

下列各節討論如何設定 IIS 10.0 的核心模式和使用者模式層面。

核心模式設定

效能相關的 HTTP.sys 設定分為兩大類:快取管理以及連線和要求管理。 所有登錄設定都儲存在下列登錄項目下方:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters

附註 如果 HTTP 服務已在執行中,則您必須將其重新啟動,變更才會生效。

快取管理設定

HTTP.sys 所提供的其中一個優點是核心模式快取。 如果回應位於核心模式快取中,則您可以從核心模式完全滿足 HTTP 要求,而這會大幅降低處理要求的 CPU 成本。 不過,IIS 10.0 的核心模式快取是以實體記憶體為基礎,而且項目的成本是其所佔用的記憶體。

只有在使用快取時,快取中的項目才會有用。 不過,無論是否使用項目,項目一律會耗用實體記憶體。 您必須考慮可用的資源 (CPU 和實體記憶體) 和工作負載需求,來評估快取中的項目在項目生命週期的有用性 (能夠從快取中提供項目的費用) 和其成本 (已佔用的實體記憶體)。 HTTP.sys 會嘗試只保留快取中有用的主動存取項目,但您可以調整特定工作負載的 HTTP.sys 快取來提升網頁伺服器的效能。

下列是 HTTP.sys 核心模式快取的一些有用設定:

  • UriEnableCache 預設值:1

    非零值可啟用核心模式回應和片段快取。 針對大部分的工作負載,快取應該保持啟用狀態。 如果您預期回應和片段快取很低,則請考慮停用快取。

  • UriMaxCacheMegabyteCount 預設值:0

    非零值,指定核心模式快取可用的記憶體上限。 預設值 0 可讓系統自動調整快取可用的記憶體數量。

    附註 指定大小只會設定最大值,而且系統可能不會讓快取成長為設定大小上限。

    Â

  • UriMaxUriBytes 預設值:262144 位元組 (256 KB)

    核心模式快取中項目的大小上限。 不會快取大於此值的回應或片段。 如果您有足夠的記憶體,則請考慮增加限制。 如果記憶體有限,而且大型項目擠在較小的記憶體中,則降低限制可能有所幫助。

  • UriScavengerPeriod 預設值:120 秒

    清除程式會定期掃描 HTTP.sys 快取,並移除未在清除程式掃描之間存取的項目。 將清除程式期間設定為高值可減少清除程式掃描數目。 不過,快取記憶體使用量可能會增加,因為較舊、較不常存取的項目可能會保留在快取中。 將期間設地太低會導致更頻繁的清除程式掃描,而且會導致太多排清和快取變換。

要求和連線管理設定

在 Windows Server 2022 中,HTTP.sys 會自動管理連線。 下列是不再使用的登錄設定:

  • MaxConnections

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\MaxConnections
    
  • IdleConnectionsHighMark

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\IdleConnectionsHighMark
    
  • IdleConnectionsLowMark

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\IdleConnectionsLowMark
    
  • IdleListTrimmerPeriod

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\IdleListTrimmerPeriod
    
  • RequestBufferLookasideDepth

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\RequestBufferLookasideDepth
    
  • InternalRequestLookasideDepth

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Http\Parameters\InternalRequestLookasideDepth
    

使用者模式設定

本區段中的設定會影響 IIS Â 10.0 背景工作程序行為。 這些設定大部分可以在下列 XML 設定檔中找到:

%SystemRoot%\system32\inetsrv\config\applicationHost.config

使用 Appcmd.exe、IIS 10.0 管理主控台、WebAdministration 或 IISAdministration PowerShell Cmdlet 進行變更。 大部分設定都會自動偵測到,而且不需要重新啟動 IIS 10.0 背景工作程序或 Web 應用程式伺服器。 如需 applicationHost.config 檔案的詳細資訊,請參閱 ApplicationHost.config 簡介

NUMA 硬體的理想 CPU 設定

從 Windows Server 2016 開始,IIS 10.0 支援其執行緒集區執行緒的自動理想 CPU 指派,以增強 NUMA 硬體上的效能和可擴縮性。 此功能預設為啟用,而且可以透過下列登錄機碼進行設定:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\InetInfo\Parameters\ThreadPoolUseIdealCpu

啟用此功能後,IIS 執行緒管理員會盡最大努力,根據目前負載以將 IIS 執行緒集區執行緒平均散發到所有 NUMA 節點中的所有 CPU。 一般而言,建議針對 NUMA 硬體維持此預設設定不變。

附註 理想的 CPU 設定與應用程式集區的 CPU 設定中所引進的背景工作程序 NUMA 節點指派設定 (numaNodeAssignment 和 numaNodeAffinityMode) 不同。 理想的 CPU 設定會影響 IIS 散發其執行緒集區執行緒的方式,而背景工作程序 NUMA 節點指派設定可決定背景工作程序所啟動的 NUMA 節點。

使用者模式快取行為設定

此區段描述影響 IIS Â 10.0 中快取行為的設定。 使用者模式快取會實作為模組,而此模組接聽整合式管線所引發的全域快取事件。 若要完全停用使用者模式快取,請從 applicationHost.config 之 system.webServer/globalModules 設定區段的已安裝模組清單中移除 FileCacheModule (cachfile.dll) 模組。

system.webServer/caching

屬性 描述 預設
已啟用 設定為 False 時,停用使用者模式快取。 快取命中率非常小時,您可以完全停用快取,以避免與快取程式碼路徑相關聯的額外負荷。 停用使用者模式快取並不會停用核心模式快取。 True
enableKernelCache 設定為 False 時,停用核心模式快取。 True
maxCacheSize 將 IIS 使用者模式快取大小限制指定的大小 (MB)。 IIS 會根據可用的記憶體來調整預設值。 根據經常存取的檔案集大小與 RAM 數量或 IIS 程序位址空間數量,來仔細選擇值。 0
maxResponseSize 最多將檔案快取到指定的大小。 實際值取決於資料集中最大檔案的數目和大小與可用的 RAM。 快取大型且經常要求的檔案可以減少 CPU 使用量、磁碟存取和相關聯的延遲。 262144

壓縮行為設定

從 7.0 開始,IIS 預設會壓縮靜態內容。 此外,安裝 DynamicCompressionModule 時,預設會啟用動態內容的壓縮。 壓縮可減少頻寬使用量,但會增加 CPU 使用量。 如果可能,請將壓縮的內容快取至核心模式快取。 從 8.5 開始,IIS 可讓您獨立控制靜態和動態內容的壓縮。 靜態內容通常是指不會變更的內容,例如 GIF 或 HTM 檔案。 動態內容通常是透過伺服器上的指令碼或程式碼所產生,即 ASP.NET 頁面。 您可以將任何特定延伸的分類自訂為靜態或動態。

若要完全停用壓縮,請從 applicationHost.config 之 system.webServer/globalModules 區段的模組清單中移除 StaticCompressionModule 和 DynamicCompressionModule。

system.webServer/httpCompression

屬性 描述 預設
staticCompression-EnableCpuUsage

staticCompression-DisableCpuUsage

dynamicCompression-EnableCpuUsage

dynamicCompression-DisableCpuUsage
如果目前的百分比 CPU 使用量超過或低於指定限制,則請啟用或停用壓縮。

從 IIS 7.0 開始,如果穩定狀態 CPU 增加超過停用閾值,則會自動停用壓縮。 如果 CPU 低於啟用閾值,則會啟用壓縮。
分別是 50、100、50 和 90
目錄 指定壓縮版靜態檔案的暫時儲存和快取目錄。 如果頻繁存取此目錄,則請考慮將此目錄移出系統磁碟機。 %SystemDrive%\inetpub\temp\IIS Temporary Compressed Files
doDiskSpaceLimiting 指定是否有所有壓縮檔可佔用磁碟空間數量的限制。 壓縮檔會儲存至 directory 屬性所指定的壓縮目錄中。 True
maxDiskSpaceUsage 指定壓縮檔可在壓縮目錄中佔用的磁碟空間位元組數目。

如果所有壓縮內容的大小總計太大,則可能需要增加此設定。
100 MB

system.webServer/urlCompression

屬性 描述 預設
doStaticCompression 指定是否壓縮靜態內容。 True
doDynamicCompression 指定是否壓縮動態內容。 True

注意

針對執行 IIS 10.0 且具有低平均 CPU 使用量的伺服器,請考慮啟用動態內容的壓縮,尤其是回應很大時。 這應該先在測試環境中完成,以根據基準來評估 CPU 使用量的影響。

調整預設文件清單

預設文件模組會處理目錄根目錄的 HTTP 要求,並將其轉譯為特定檔案的要求,例如 Default.htm 或 Index.htm。 平均而言,網際網路上大約所有要求的 25% 會通過預設文件路徑。 針對個別網站,這會有很大的差異。 HTTP 要求未指定檔案名稱時,預設文件模組會搜尋檔案系統中每個名稱的允許預設文件清單。 這可能會對效能造成負面影響,特別是接觸內容需要進行網路來回行程或觸碰磁碟時。

您可以選擇性地停用預設文件,以及減少或排序文件清單,來避免額外負荷。 針對使用預設文件的網站,您應該將清單只縮減為使用的預設文件類型。 此外,排序清單,使其以最常存取的預設文件檔案名稱開頭。

您可以選擇性地在特定 URL 上設定預設文件行為,方法是自訂 applicationHost.config 中位置標記內的設定,或直接在內容目錄中插入 web.config 檔案。 這允許混合式方法,這只會在必要時才啟用預設文件,並將清單設定為每個 URL 的正確檔案名稱。

若要完全停用預設文件,請從 applicationHost.config 之 system.webServer/globalModules 區段的模組清單中移除 DefaultDocumentModule。

system.webServer/defaultDocument

屬性 描述 預設
「已啟用」 指定啟用預設文件。 True
<files> 項目 指定設定為預設文件的檔案名稱。 預設清單為 Default.htm、Default.asp、Index.htm、Index.html、Iisstart.htm 和 Default.aspx。

中央二進位記錄

伺服器工作階段下方有許多 URL 群組時,針對個別 URL 群組建立數百個格式化記錄檔並將記錄資料寫入至磁碟的程序可以快速耗用寶貴的 CPU 和記憶體資源,進而產生效能和可擴縮性問題。 集中式二進位記錄可將用於記錄的系統資源數量降到最低,同時為需要記錄的組織提供詳細的記錄資料。 剖析二進位格式記錄需要後續處理工具。

您可以將 centralLogFileMode 屬性設定為 CentralBinary,並將 enabled 屬性設定為 True,來啟用中央二進位記錄。 請考慮將中央記錄檔的位置從系統磁碟分割移至專用記錄磁碟機,以避免系統活動與記錄活動之間的爭用。

system.applicationHost/log

屬性 描述 預設
centralLogFileMode 指定伺服器的記錄模式。 將此值變更為 CentralBinary,以啟用中央二進位記錄。 地點

system.applicationHost/log/centralBinaryLogFile

屬性 描述 預設
「已啟用」 指定是否啟用中央二進位記錄。 False
目錄 指定在其中寫入記錄檔項目的目錄。 %SystemDrive%\inetpub\logs\LogFiles

應用程式和網站調整

下列設定與應用程式集區和網站調整有關。

system.applicationHost/applicationPools/applicationPoolDefaults

屬性 描述 預設
queueLength 指出 HTTP.sys 在拒絕未來要求之前,針對應用程式集區排入佇列的要求數目。 超過此屬性的值時,IIS 會拒絕後續要求,並出現 503 錯誤。

如果觀察到 503 錯誤,則請考慮針對與高延遲後端資料存放區通訊的應用程式增加這個值。
1000
enable32BitAppOnWin64 True 時,可讓 32 位元應用程式在具有 64 位元處理器的電腦上執行。

如果記憶體耗用量是個問題,則請考慮啟用 32 位元模式。 因為指標大小和指令大小較小,所以 32 位元應用程式所使用的記憶體小於 64 位元應用程式。 在 64 位元電腦上執行 32 位元應用程式的缺點是使用者模式位址空間限制為 4 GB。
False

system.applicationHost/sites/VirtualDirectoryDefault

屬性 描述 預設
allowSubDirConfig 指定 IIS 在低於目前層級的內容目錄中尋找 web.config 檔案 (True),還是不在低於目前層級的內容目錄中尋找 web.config 檔案 (False)。 強加只允許虛擬目錄中設定的簡單限制,IISÂ 10.0 可以知道,除非 /<name>.htm 是虛擬目錄,否則不應該尋找設定檔。 略過其他檔案作業可以大幅改善具有一組極大量隨機存取靜態內容之網站的效能。 True

管理 IIS 10.0 模組

IIS 10.0 已分解為多個使用者可延伸模組,以支援模組化結構。 這項分解的成本很小。 針對每個模組,整合式管線必須針對每個與模組相關的事件呼叫模組。 無論模組是否必須執行任何工作,都會發生這種情況。 您可以移除所有與特定網站無關的模組,以節省 CPU 週期和記憶體。

針對簡單靜態檔案進行調整的網頁伺服器可能只包括下列五個模組:UriCacheModule、HttpCacheModule、StaticFileModule、AnonymousAuthenticationModule 和 HttpLoggingModule。

若要從 applicationHost.config 移除模組,除了移除 system.webServer/globalModules 中的模組宣告之外,還需要從 system.webServer/handlers 和 system.webServer/modules 區段中移除模組的所有參考。

傳統 ASP 設定

處理傳統 ASP 要求的主要成本包括初始化指令碼引擎、將所要求的 ASP 指令碼編譯成 ASP 範本,以及在指令碼引擎上執行範本。 雖然範本執行成本取決於所要求 ASP 指令碼的複雜度,但 IIS 傳統 ASP 模組可以在記憶體中快取指令碼引擎,以及在記憶體和磁碟中快取範本 (只有在記憶體中範本快取溢位時),以提升 CPU 繫結案例的效能。

下列設定用來設定傳統 ASP 範本快取和指令碼引擎快取,而且不會影響 ASP.NET 設定。

system.webServer/asp/cache

屬性 描述 預設
diskTemplateCacheDirectory 記憶體中快取溢位時,ASP 用來儲存已編譯範本的目錄名稱。

建議:設定為未大量使用的目錄,例如,未與作業系統、IIS 記錄或其他經常存取內容共用的磁碟機。
%SystemDrive%\inetpub\temp\ASP Compiled Templates
maxDiskTemplateCacheFiles 指定可在磁碟上快取的已編譯 ASP 範本數目上限。

建議:設定為最大值 0x7FFFFFFF。
2000
scriptFileCacheSize 此屬性指定可在記憶體中快取的已編譯 ASP 範本數目上限。

建議:至少設定為應用程式集區所服務的頻繁要求 ASP 指令碼數目。 如果可能,請設定為記憶體限制所允許的 ASP 範本數目。
500
scriptEngineCacheMax 指定將持續快取至記憶體的指令碼引擎數目上限。

建議:至少設定為應用程式集區所服務的頻繁要求 ASP 指令碼數目。 如果可能,請設定為記憶體限制所允許的指令碼引擎數目。
250

system.webServer/asp/limits

屬性 描述 預設
processorThreadMax 指定ASP 可為每個處理器建立的背景工作執行緒數目上限。 發生下列情況時,請予以增加:如果目前的設定不足以處理負載,而這可能會在處理要求時導致錯誤,或導致 CPU 資源使用量過低。 25

system.webServer/asp/comPlus

屬性 描述 預設
executeInMta 如果 IIS 正在提供 ASP 內容時偵測到錯誤或失敗,則設定為 True。 例如,裝載多個隔離網站而每個網站都在其自己的背景工作程序下方執行時,會發生此情況。 在 [事件檢視器] 中,通常會從 COM+ 回報錯誤。 此設定會在 ASP 中啟用多執行緒 Apartment 模型。 False

ASP.NET 並行設定

ASP.NET 3.5

根據預設,ASP.NET 會限制要求並行,以減少伺服器上的穩定狀態記憶體耗用量。 高並行應用程式可能需要調整一些設定,才能改善整體效能。 您可以在 aspnet.config 檔案中變更此設定:

<system.web>
  <applicationPool maxConcurrentRequestsPerCPU="5000"/>
</system.web>

下列設定適用於完全使用系統上的資源:

  • maxConcurrentRequestPerCpu 預設值:5000

    此設定會限制系統上同時執行的 ASP.NET 要求數目上限。 預設值是保守值,可減少 ASP.NET 應用程式的記憶體耗用量。 如果系統所執行的應用程式執行長時間同步 I/O 作業,則請考慮增加此限制。 否則,使用者可能會因佇列或要求失敗而遇到高延遲,而失敗的原因是使用預設設定時超過高負載的佇列限制。

ASP.NET 4.6

除了 maxConcurrentRequestPerCpu 設定之外,ASP.NET 4.7 也提供設定來改善嚴重依賴非同步作業之應用程式的效能。 設定可以在 aspnet.config 檔案中進行變更。

<system.web>
  <applicationPool percentCpuLimit="90" percentCpuLimitMinActiveRequestPerCpu="100"/>
</system.web>
  • percentCpuLimit 預設值:90 非同步要求在這類案例上放置大量負載 (超過硬體功能) 時,會有一些可擴縮性問題。 問題是非同步案例上的配置本質所造成。 在這些情況下,將會在非同步作業啟動時進行配置,而且會在完成時予以取用。 到那時,這些物件很可能已被 GC 移至第 1 代或第 2 代。 發生這種情況時,除非到某個點,否則增加負載將會顯示每秒要求 (rps) 增加。 通過該點之後,GC 中所花費的時間會開始成為問題,而且 rps 將會開始下降,並產生負面縮放效果。 若要修正問題,在 CPU 使用量超過 percentCpuLimit 設定時,會將要求傳送至 ASP.NET 原生佇列。
  • percentCpuLimitMinActiveRequestPerCpu 預設值:100 CPU 節流 (percentCpuLimit 設定) 不是根據要求數目,而是根據其成本。 因此,可能只會有一些需要大量 CPU 的要求導致原生佇列中的備份,而且除了傳入要求之外,沒有方法可以將其清空。 若要解決此問題,可以使用 percentCpuLimitMinActiveRequestPerCpu 來確保將會在節流啟動之前提供最少數目的要求。

背景工作程序和回收選項

您可以設定用於回收 IIS 背景工作程序的選項,並提供適用於嚴重狀況或事件的實用解決方案,而不需要介入或重設服務或電腦。 這類情況和事件包括記憶體流失、增加記憶體負載,或無回應或閒置的背景工作程序。 在一般情況下,可能不需要回收選項,而且可以關閉回收,也可以將系統設定為很少回收。

您可以將屬性新增至 recycling/periodicRestart 元素,以啟用特定應用程式的程序回收。 數個事件可以觸發回收事件,包括記憶體使用量、固定數目的要求和固定的時間週期。 回收背景工作程序時,會清空已佇列和執行中要求,並同時啟動新的程序來維護新的要求。 recycling/periodicRestart 元素是根據應用程式,這表示下表中的每個屬性都會根據每個應用程式來進行分割。

system.applicationHost/applicationPools/ApplicationPoolDefaults/recycling/periodicRestart

屬性 描述 預設
記憶體 如果虛擬記憶體耗用量超過指定的限制 (KB),則請啟用程序回收。 針對具有小型 2 GB 位址空間的 32 位元電腦,這是有用的設定。 這有助於避免因記憶體不足錯誤而失敗的要求。 0
privateMemory 如果專用記憶體配置超過指定的限制 (KB),則請啟用程序回收。 0
requests 在特定數目的要求之後啟用程序回收。 0
time 在指定的時間期間之後啟用程序回收。 29:00:00

動態背景工作程序頁面輸出調整

從 Windows Server 2012 R2 開始,IIS 提供可設定在背景工作程序閒置一段時間後暫停的選項 (除了自 IIS 7 之後存在的終止選項之外)。

閒置背景工作程序頁面輸出和閒置背景工作程序終止功能的主要用途是節省伺服器上的記憶體使用率,因為網站會耗用大量記憶體,即使它只是在那裡接聽也是一樣。 根據網站上所使用的技術 (靜態內容與 ASP.NET 與其他架構),所使用的記憶體可以大約 10 MB 到數百 MB,而且這表示如果您的伺服器已設定許多網站,則找出網站的最有效設定可以大幅改善使用中和已暫停網站的效能。

在更深入之前,必須要記住,如果沒有記憶體條件約束,則最好只將網站設定為永不暫停或終止。 畢竟,如果背景工作處理序是機器上的唯一項,那麼終止該處理序就沒有多大價值。

注意

如果網站執行不穩定的程式碼 (例如具有記憶體流失的程式碼或其他不穩定),則將網站設定為在閒置時終止可能是修正程式碼 Bug 的臨時應急替代方案。 這不是我們會鼓勵的作法,但在危機情況下,最好使用這項功能作為清理機制,而更永久的解決方案還在研究中。

另一個要考慮的因素是,如果網站確實使用大量記憶體,則暫停程序本身會造成損失,因為電腦必須將背景工作程序所使用的資料寫入至磁碟。 如果背景工作程序要使用大量記憶體,則將其暫停可能會比必須等待其開始備份的成本還要昂貴。

若要充分利用背景工作程序暫停功能,您需要檢閱每個應用程式集區中的網站,並決定應該暫停的項目、應該終止的項目,以及應該無限期使用的項目。 針對每個動作和每個網站,您需要找出理想的逾時期間。

在理想情況下,您將設定暫停或終止的網站就是每天都有訪客的網站,但無法保證其隨時都保持使用中。 這些通常是一天或更少時間有大約 20 個唯一訪客的網站。 您可以使用網站的記錄檔來分析流量模式,並計算平均每日流量。

請記住,特定使用者連線至網站之後,通常會停留至少一段時間,並提出額外的要求,因此只計算每日要求可能無法準確地反映實際的流量模式。 若要取得更精確的閱讀,您也可以使用 Microsoft Excel 這類工具來計算要求之間的平均時間。 例如:

數字 要求 URL 要求時間 差異
1 /SourceSilverLight/Geosource.web/grosource.html 10:01
2 /SourceSilverLight/Geosource.web/sliverlight.js 10:10 0:09
3 /SourceSilverLight/Geosource.web/clientbin/geo/1.aspx 10:11 0:01
4 /lClientAccessPolicy.xml 10:12 0:01
5 /SourceSilverLight/GeosourcewebService/Service.asmx 10:23 0:11
6 / SourceSilverLight/Geosource.web/GeoSearchServer...¦. 11:50 1:27
7 /rest/Services/CachedServices/Silverlight_load_la...¦ 12:50 1:00
8 /rest/Services/CachedServices/Silverlight_basemap...¦. 12:51 0:01
9 /rest/Services/DynamicService/ Silverlight_basemap...¦. 12:59 0:08
10 /rest/Services/CachedServices/Ortho_2004_cache.as... 13:40 0:41
11 /rest/Services/CachedServices/Ortho_2005_cache.js 13:40 0:00
12 /rest/Services/CachedServices/OrthoBaseEngine.aspx 13:41 0:01

不過,困難的部分是找出要套用且有意義的設定。 在我們的案例中,網站會從使用者處取得一堆要求,而上面的表格會顯示在 4 小時的期間內共發生 4 個唯一工作階段。 使用應用程式集區背景工作程序暫停的預設設定時,會在 20 分鐘的預設逾時後終止網站,這表示所有這些使用者都會經歷網站啟動週期。 這讓它成為背景工作程序暫停的理想候選項目,因為網站大部分時間都處於閒置狀態,因此將其暫停可節省資源,並讓使用者幾乎立即到達網站。

最後也是非常重要的注意事項是,磁碟效能對此功能十分重要。 因為暫停和喚醒程序涉及將大量資料寫入和讀取至硬碟,所以強烈建議為此使用快速磁碟。 固態硬碟 (SSD) 最適合且強烈建議您用於此作業,而且您應該確定 Windows 分頁檔案儲存在其上 (如果作業系統本身未安裝在 SSD 上,則請設定作業系統以將分頁檔案移至其中)。

無論您是否使用 SSD,也建議您修正分頁檔案的大小,以容納將頁面輸出資料寫入至其中,而不需調整檔案大小。 作業系統需要將資料儲存至分頁檔案時,可能會發生分頁檔案調整大小,因為根據預設,Windows 會設定為根據需求自動調整其大小。 將大小設定為固定大小,即可防止調整大小以及大幅改善效能。

若要設定預先固定的分頁檔案大小,您需要計算其理想大小,而這取決於您將暫停的網站數目,以及其耗用多少記憶體。 如果使用中背景工作程序的平均值為 200 MB,且您在即將暫停的伺服器上有 500 個網站,則分頁檔案應該至少超過分頁檔案基底大小的 (200 * 500) MB (因此在我們的範例中為基底 + 100 GB)。

注意

暫停網站時,每個網站會耗用大約 6 MB,因此在我們的案例中,暫停所有網站的記憶體使用量大約為 3 GB。 但是,實際上要同時暫停這些網站是不可能的。

傳輸層安全性調整參數

傳輸層安全性 (TLS) 的使用會增加額外的 CPU 成本。 TLS 的最昂貴元件是建立工作階段建立的成本,因為其涉及完整的交握。 重新連線、加密和解密也會增加成本。 如需更好的 TLS 效能,請執行下列動作:

  • 啟用 TLS 工作階段的 HTTP 保持運作。 這可消除工作階段建立成本。

  • 在適當時重複使用工作階段,特別是針對非保持運作流量。

  • 選擇性地只將加密套用至需要加密的頁面或網站部分,而不是整個網站。

注意

  • 較大的金鑰提供更多的安全性,但也會使用更多的 CPU 時間。
  • 可能不需要加密所有元件。 不過,混合使用純 HTTP 與 HTTPS 可能會導致快顯警告,指出並非頁面上的所有內容都安全。

網際網路伺服器應用程式設計介面 (ISAPI)

ISAPI 應用程式不需要任何特殊調整參數。 如果您撰寫私人 ISAPI 延伸,則請確定是針對效能和資源使用而撰寫。

受管理程式碼調整指導方針

IIS 10.0 中的整合管線模型可啟用高度的彈性和擴充性。 以原生或受管理程式碼實作的自訂模組可以插入至管線,也可以取代現有的模組。 雖然此擴充性模型提供便利性和簡單性,但在插入可連結至全域事件的新受管理模組之前請小心。 新增全域受管理模組表示所有要求 (包括靜態檔案要求) 都必須接觸受管理程式碼。 自訂模組容易發生記憶體回收這類事件。 此外,自訂模組會因封送處理原生程式碼與受管理程式碼之間的資料而增加大量 CPU 成本。 如果可能,您應該將 preCondition 設定為受管理模組的 managedHandler。

若要獲得更好的冷啟動效能,請確定您預先編譯 ASP.NET 網站,或利用 IIS 應用程式初始化功能來準備應用程式。

如果不需要工作階段狀態,則請確定您已針對每個頁面將其關閉。

如果有許多 I/O 繫結作業,則請嘗試使用相關 API 的非同步版本,以提供更好的可擴縮性。

此外,適當地使用輸出快取也會提升網站的效能。

當您以隔離模式執行多個包含 ASP.NET 指令碼的主機時 (一個網站有一個應用程式集區),會監視記憶體使用量。 請確定伺服器有足夠的 RAM 可供預期數目的並存執行應用程式集區使用。 請考慮使用多個應用程式網域,而不是多個隔離程序。

影響 IIS 效能的其他問題

下列問題會影響 IIS 效能:

  • 安裝未感知快取的篩選

    安裝非 HTTP 快取感知的篩選會導致 IIS 完全停用快取,而這會導致效能不佳。 IIS 6.0 之前所寫入的 ISAPI 篩選會導致此行為。

  • 通用閘道介面 (CGI) 要求

    基於效能考量,不建議搭配使用 CGI 應用程式與 IIS 來提供要求。 頻繁建立和刪除 CGI 程序會涉及大量額外負荷。 更好的替代方案包括使用 FastCGI、ISAPI 應用程式指令碼和 ASP 或 ASP.NET 指令碼。 所有這些選項都可以使用隔離。

其他參考