Windows Server Update Services 最佳做法

本文提供有关避免由于 WSUS 中的设计或配置限制而导致性能不佳的配置的提示。

原始产品版本:Configuration Manager (current Branch) ,Windows Server Update Services
原始 KB 编号: 4490414

容量限制

尽管 WSUS 可以支持每个服务器 100,000 个客户端(当使用 Configuration Manager 时,则为 150,000 个客户端),但我们不建议接近这一限制。

但是可以考虑使用 2-4 台服务器共享同一个 SQL Server 数据库的配置。 这样,你就可以在数量上获得安全保障。 即使一台服务器宕机,也不会毁了你的周末,因为没有客户端可以更新,而你则必然已针对最新的零日攻击获得了更新。

共享数据库方案还可防止扫描风暴。

当许多客户端更改 WSUS 服务器而服务器不共享数据库时,可能会发生扫描风暴。 WSUS 跟踪数据库中的活动,以便既可以知道自上次扫描客户端以来发生了什么变化,又可以只发送自上次扫描以来更新的元数据。

如果客户端更改为使用不同数据库的不同 WSUS 服务器,则客户端必须执行完整扫描。 完全扫描可能导致大量元数据传输。 在这些情况下,单个客户端的传输量可能会超过 1GB,特别是在没有正确维护 WSUS 服务器的情况下。 这样,当客户端与 WSUS 实例通信时,生成的负载足以导致错误。 在这种情况下,客户端会不断重试。

共享数据库意味着,当客户端切换到使用相同 DB 的另一个 WSUS 实例时,不会产生扫描惩罚。 负载增加并不是切换数据库所需承担的重大代价。

与独立的自动更新相比,Configuration Manager 客户端扫描对 WSUS 的要求更高。 因为 Configuration Manager 包括合规性检查,所以其请求扫描的条件将导致返回除拒绝之外的任何状态的所有更新。

当“自动更新代理”扫描,或者在你选择“控制面板”中的“检查更新”时,代理将发送条件,以仅检索那些“已审批进行安装”的更新。 返回的元数据通常少于由 Configuration Manager 启动扫描时返回的元数据。 更新代理将缓存数据,下一个扫描请求将从客户端缓存返回数据。

禁用回收和配置内存限制

WSUS 实施从数据库中检索更新元数据的内部缓存。 此操作成本高昂,内存占用极高。 托管 WSUS 的 IIS 应用程序池(称为 WSUSPool)可能会在 WSUSPool 超过默认的专用和虚拟内存限制时进行回收。

当该池回收时,缓存将被删除,必须重新生成。 当客户端正在进行增量扫描时,这不是一个大问题。 但是,如果最终遇到扫描风暴,池就会不断回收。 当你发出扫描请求时,客户端将收到错误,例如“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 编码的压缩类型。 它对更新元数据实施压缩,并可显著节省带宽。

Xpress 编码可通过 IIS ApplicationHost.config 中 <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 将 Intranet Microsoft 更新服务位置指定 为 <https://wsus.contoso.com:8531>。

要开始,请参阅使用安全套接字层协议保护 WSUS

配置防病毒排除项

关于累积更新和月度汇总

你可能会看到 Windows 操作系统更新所使用的“月度汇总”和“累积更新”等术语。 它们可能会被互换使用。 汇总指的是针对 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 and 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
}

参考