共用方式為


Windows 10 中的服務主機群組

服務主機 (svchost.exe) 是共用服務程式,可作為從 DLL 檔案載入服務的殼層。 服務會組織成相關的主機群組,而每個群組會在服務主機進程的不同實例內執行。 如此一來,一個實例中的問題並不會影響其他實例。 服務主機群組是透過結合服務與相符的安全性需求來決定。 例如:

  • 本地服務
  • 本地服務沒有網路
  • 局域服務網路受限制
  • 本機系統
  • 局域系統網路受限
  • 網路服務

分隔 SvcHost 服務

從 Windows 10 Creators Update (1703 版) 開始,先前分組的服務會改為分隔,每個服務都會在自己的 SvcHost 程式中執行。 對於 RAM 超過 3.5 GB 且執行用戶端桌面 SKU 的系統而言,這項變更是自動的。 在 RAM 為 3.5 GB 或更少的系統上,我們會繼續將服務分組至共用的 SvcHost 程式。

此設計變更的優點包括:

  • 藉由將重要網路服務與主機中另一個非網路服務的失敗隔離,並新增在網路元件當機時順暢地還原網路連線的能力,來提高可靠性。
  • 藉由消除與在共用主機中隔離行為錯誤服務相關的疑難解答額外負荷,降低支援成本。
  • 藉由提供更多服務間隔離來提高安全性
  • 允許個別服務設定和許可權,以提高延展性
  • 透過個別服務 CPU、I/O 和記憶體管理改善資源管理,並增加清楚的診斷數據 (每個服務) 報告 CPU、I/O 和網路使用量。

試試看

若要查看重構行為,請建立 Windows 10 1703 版 VM,並設定記憶體設定,如下所示:

  1. 若要查看分組的進程,請將 RAM 設定為 3484 MB 或更少。 重新啟動 VM,然後開啟 [任務管理器]。
  2. 若要查看分隔的進程,請將 RAM 設定為 3486 MB 或更大。 重新啟動 VM,然後開啟 [任務管理器]。

重構也可讓您更輕鬆地在任務管理器中檢視執行中的進程。 您可以查看任務管理器,並確切知道哪個服務正在使用哪些資源,而不需要擴充許多個別的主機群組。

例如,以下是在 Windows 10 1607 版中,任務管理器中顯示的執行中進程:

在任務管理員 1607 版中執行進程。

將它與在 Windows 10 1703 版中執行進程的相同檢視進行比較:

在任務管理員 1703 版中執行進程。

例外狀況

某些服務會繼續分組在執行 3.5 GB 或更高 RAM 的電腦上。 例如,基底篩選引擎 (BFE) 和 Windows 防火牆 (Mpssvc) 會群組在單一主機群組中,RPC 端點對應程式和遠端過程調用服務也會一起分組。

如果您需要識別將持續分組的服務,除了在任務管理器中看到它們並使用命令行工具之外,您還可以在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下的個別服務密鑰中尋找 SvcHostSplitDisable 值。

預設值 1 會防止分割服務。

例如,BFE 的登錄機碼組態為: 無法分隔的服務範例。

記憶體使用量

分隔服務會增加 SvcHost 實例的總數,這會增加記憶體使用率。 (服務群組可大幅減少相關服務的整體資源使用量。)

請考慮下列範例:

群組服務 (< 3.5 GB) 分割服務 (3.5 GB+)
分組服務的記憶體使用率。 分隔服務的記憶體使用率

注意

上述表示觀察到的尖峰值。

服務實例總數和產生的記憶體使用率會根據活動而有所不同。 群組服務的實例計數通常介於 17-21 之間,而分隔服務的實例計數範圍為 67-74。

試試看

若要判斷分割裝載服務對 Windows 10 1703 版計算機的影響,請在切換記憶體設定之前和之後執行下列 Windows PowerShell Cmdlet:

Get-Process SvcHost | Group-Object -Property ProcessName | Format-Table Name, Count, @{n='Mem (KB)';e={'{0:N0}' -f (($_.Group|Measure-Object WorkingSet -Sum).Sum / 1KB)};a='right'} -AutoSize