Windows Server Update Services 最佳做法
本文提供避免因 WSUS 設計或設定限制而導致效能不佳之設定的秘訣。
原始產品版本: Configuration Manager (目前分支),Windows Server Update Services
原始 KB 編號: 4490414
容量限制
雖然每部伺服器 WSUS 可以支援 100,000 個用戶端 (當您使用 Configuration Manager 時為 150,000 個用戶端),但我們不建議達到此限制。
相反地,請考慮使用 2-4 部伺服器的組態來共用相同的 SQL Server 資料庫。 如此一來,您就可以安全地使用數位。 如果有一部伺服器關閉,就不會立即中斷您的週末,因為當您必須針對最新的零時差惡意攻擊進行更新時,沒有任何用戶端可以更新。
共用資料庫案例也會防止掃描風暴。
當許多用戶端變更 WSUS 伺服器且伺服器未共用資料庫時,可能會發生掃描風暴。 WSUS 會追蹤資料庫中的活動,讓兩者都知道自用戶端上次掃描後已變更的內容,而且只會傳送自之後更新的中繼資料。
如果用戶端變更為使用不同資料庫的不同 WSUS 伺服器,則必須執行完整掃描。 完整掃描可能會導致大型中繼資料傳輸。 在這些案例中,每個用戶端的傳輸可能會超過 1 GB,特別是 WSUS 伺服器未正確維護時。 它可以產生足夠的負載,以便在用戶端與 WSUS 執行個體通訊時造成錯誤。 在此情況下,用戶端會重複重試。
共用資料庫表示當用戶端切換至使用相同 DB 的另一個 WSUS 執行個體時,不會造成掃描懲罰。 負載增加並不是您為切換資料庫所承擔的大量懲罰。
Configuration Manager 用戶端掃描對 WSUS 的需求高於獨立自動更新。 因為 Configuration Manager 包含合規性檢查,所以會要求使用準則進行掃描,以傳回所有處於拒絕狀態的更新。
當自動更新代理程式掃描,或您選取 [檢查主控台中的更新] 時,代理程式會傳送準則,只擷取已核准安裝的更新。 傳回的中繼資料通常會小於由 Configuration Manager 起始掃描時。 更新代理程式會快取資料,而下一個掃描要求會從用戶端快取傳回資料。
停用回收和設定記憶體限制
WSUS 會實施從資料庫擷取更新中繼資料的內部快取。 這項作業耗費大量資源且非常耗用記憶體。 當 WSUSPool 超過預設的私人和虛擬記憶體限制時,可能會導致裝載 WSUS (稱為 WSUSPool) 的 IIS 應用程式集區回收。
當集區回收時,會移除快取,而且必須重建。 當用戶端正在進行增量掃描時,這不是大問題。 但是,如果您最終會遇到掃描風暴案例,集區將會持續回收。 當您提出掃描請求時,用戶端會收到錯誤,例如 HTTP 503 錯誤。
建議您增加預設的 佇列長度,並將其設定為 0 來停用虛擬和私人記憶體限制。 IIS 每隔 29 小時會實施應用程式集區的自動回收、Ping 和閒置逾時,全部都應該停用。 這些設定位於 IIS 管理員>應用程式集區>中選擇 [WsusPool],然後單擊 IIS 管理員右側窗格中的 [進階設定] 連結。
以下是建議變更的摘要,以及相關的螢幕擷取畫面。 如需詳細資訊,請參閱在 Configuration Manager 中規劃軟體更新。
設定名稱 | 值 |
---|---|
佇列長度 | 2000 (從預設值 1000) |
閒置逾時 (分鐘) | 0 (從預設值 20) |
Ping 已啟用 | False (從預設值 True) |
私人記憶體限制 (KB) | 0 (無限制,從預設值 1,843,200 KB) |
一般時間間隔 (分鐘) | 0 (以防止回收,並從預設值 1740 修改) |
在快取了大約 17,000 個更新的環境中,建置快取時可能需要超過 24 GB 的記憶體,直到穩定 (在大約 14 GB) 為止。
(如果您想要節省頻寬) 請檢查是否已啟用壓縮
WSUS 會使用呼叫 Xpress 編碼的壓縮類型。 它會在更新中繼資料上實施壓縮,並可大幅節省頻寬。
在 IIS ApplicationHost.config 中會啟用 Xpress 編碼,並在 <httpCompression>
元素下方使用這一列和登錄設定:
ApplicationHost.Config
<scheme name=“xpress” doStaticCompression=“false” doDynamicCompression=“true” dll=“C:\Program Files\Update Services\WebServices\suscomp.dll” staticCompressionLevel=“10” dynamicCompressionLevel=“0” />
登錄機碼
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\IIsDynamicCompression
如果兩者都不存在,可以藉由執行此命令,然後在 IIS 中重新啟動 WsusPool 應用程式集區來加以啟用。
cscript "%programfiles%\update services\setup\DynamicCompression.vbs" /enable "%programfiles%\Update Services\WebServices\suscomp.dll"
Xpress 編碼會增加一些 CPU 額外負荷,如果頻寬不是問題,但 CPU 使用量是問題,則可以停用。 下列命令會將其關閉。
cscript "%programfiles%\update services\setup\DynamicCompression.vbs" /disable
設定產品和類別
當您設定 WSUS 時,請只選擇您打算部署的產品和類別。 您可以一律同步處理稍後必須具備的類別和產品。 當您不打算部署它們時,新增它們會增加 WSUS 伺服器上的中繼資料大小和額外負荷。
停用 Itanium 更新和其他不必要的更新
這應該不會是較長的問題,因為 Windows Server 2008 R2 是支援 Itanium 的最後一個版本。 但值得一提。
在您的環境中自訂並使用 此 指令碼,以拒絕 Itanium 架構更新。 指令碼也可以拒絕更新標題中包含 預覽 或 Beta 的更新。
這會導致 WSUS 主控台更具回應性,但不會影響用戶端掃描。
拒絕已取代的更新並執行維護
您可以執行其中一個最重要的動作來協助 WSUS 更好地執行。 將更新保留在已取代的時間 (例如,在不再部署更新之後) 是 WSUS 效能問題的主要原因。 如果您仍在部署它們,可以保留它們。 完成之後,請將它們移除。
如需拒絕已取代更新和其他 WSUS 維護項目的相關資訊,請參閱 Microsoft WSUS 和 Configuration Manager SUP 維護的完整指南一文。
具有 SSL 設定的 WSUS
預設情況下,WSUS 不會設定為使用 SSL 進行用戶端通訊。 安裝後的第一個步驟應該是在 WSUS 上設定 SSL,以確保伺服器與用戶端通訊之間的安全性。
您必須可以執行下列其中一個動作:
- 建立自我簽署憑證。 這並不理想,因為每個用戶端都必須信任此憑證。
- 從協力廠商憑證提供者取得憑證。
- 從內部憑證基礎結構取得憑證基礎結構。
您的憑證必須具有其所使用的簡短的伺服器名稱、FQDN 和 SAN 名稱 (別名)。
安裝憑證之後,請升級 Configuration Manager 中軟體更新的群組原則 (或用戶端組態設定),以使用 WSUS 伺服器的位址和 SSL 埠。 埠通常是 8531 或 443。
例如,將 GPO 指定內部網路Microsoft將服務位置 更新為 <https://wsus.contoso.com:8531
>。
若要開始使用,請參閱 使用安全通訊端層通訊協定保護 WSUS。
設定防毒軟體排除項目
關於累積更新和每月彙總套件
您可能會看到用於 Windows OS 更新的每月彙總套件和累積更新一詞。 它們可以交替使用。 彙總套件指的是針對 Windows 7、Windows 8.1、Windows Server 2008 R2 和 Windows Server 2012 R2 發佈的更新,這些更新僅部分累積。
如需詳細資訊,請參閱下列部落格貼文:
從 Windows 10 和 Windows Server 2016,更新會從頭開始累積:
累積表示:您會安裝作業系統的發行版本,而且只需要套用最新的累積更新才能完全修補。 對於較舊的作業系統,雖然這是我們的方向,但我們還沒有這類更新。
針對 Windows 7 和 Windows 8.1,這表示在您安裝最新的每月彙總套件之後,仍然需要更多更新。 以下是 Windows 7 和 Windows Server 2008 R2 的範例,其中包含幾乎完全修補的系統。
下表包含 Windows 每月彙總套件和累積更新的清單。 您也可以搜尋 Windows <版本> 更新歷程記錄來尋找它們。
Windows 版本 | 更新 |
---|---|
Windows 7 SP1 和 Windows Server 2008 R2 SP1 | Windows 7 SP1 和 Windows Server 2008 R2 SP1 更新記錄 |
Windows 8.1 與 Windows Server 2012 R2 | Windows 8.1 和 Windows Server 2012 R2 更新記錄 |
Windows 10 與 Windows Server 2016 | Windows 10 和 Windows Server 更新歷程記錄 |
Windows Server 2019 | Windows 10 和 Windows Server 2019 更新歷程記錄。 |
另一個要考慮的重點是,並非所有更新都會發佈,因此會自動同步至 WSUS。 例如, C 和 D 周累積更新是預覽更新,不會同步至 WSUS,但必須改為手動匯入。 請參閱 Windows 10 更新服務頻率的每月品質更新一節。
使用 PowerShell 連線到 WSUS 伺服器
以下是讓您開始使用 PowerShell 和 WSUS API 的程式碼範例。 它可以在安裝 WSUS 管理主控台的位置執行。
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
$WSUSServer = 'WSUS'
# This is your WSUS Server Name
$Port = 8530
# This is 8531 when SSL is enabled
$UseSSL = $False
#This is $True when SSL is enabled
Try
{
$Wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer($WSUSServer,$UseSSL,$Port)
}
Catch
{
Write-Warning "$($WSUSServer)<$($Port)>: $($_)"
Break
}