排查 WSUS 服务器上的 CPU 使用率过高问题

本文介绍了在 Windows Server 更新服务(WSUS)中排查 CPU 使用率过高问题的过程。

注意

家庭用户:本文仅适用于技术支持代理和 IT 专业人员。 如果你正在寻找解决问题的帮助, 请询问Microsoft社区

原始产品版本: Configuration Manager(Current Branch)
原始 KB 数: 4489045

如果 WSUS 数据库(SUSDB)不干净,则可能会出现高 CPU 使用率。 服务器运行一段时间后,WSUS 服务器可能会有太多更新来向客户端提供。

在这种情况下,如果发生故障或安装了新的 WSUS 服务器或不相关的问题阻止客户端扫描几天,则所有客户端都可能开始扫描并继续持续扫描,并且永远不会真正完成扫描或安装更新。

若要解决此问题,必须清理 WSUS 服务器并拒绝取代的更新。 按照下面的顺序执行步骤,作为每月清理例程。 但是,如果要排查 CPU 使用率高的问题,建议先执行步骤 4,然后再执行步骤 3。 应延迟步骤 1 和 2,直到 CPU 使用率级别下降。

步骤 1:备份 WSUS 数据库

备份 WSUS 数据库可以稍微提高性能。

步骤 2:运行 WSUS 服务器清理向导

运行 WSUS 服务器清理向导可以提高数据库性能。 但是,它不会减少客户端正在扫描的更新数。 此外,向导可能需要几个小时或几天才能运行,而无需解决问题。

步骤 3:重新编制 WSUS 数据库索引

重新编制 WSUS 数据库索引可以提高数据库性能(如果碎片化)。 为此,请运行以下命令。

  1. statistics使用FULLSCAN选项更新。

    Use <dbname>
    Go
    Exec sp_msforeachtable 'update statistics ? with fullscan'
    Go
    
  2. 重新生成索引。

    Use <dbname>
    Go
    Exec sp_msforeachtable 'DBCC DBREINDEX (''?'')'
    Go
    

步骤 4:拒绝取代的更新

拒绝取代的更新会立即减少正在扫描的更新数。

若要在 WSUS 应用程序池回收速度过快的情况下拒绝取代的更新或执行任何 WSUS 操作,可以首先阻止客户端连接到 WSUS 应用程序池。 为此,请使用 WSUS 控制台连接到 WSUS 服务器,然后将 WSUS 服务器与上游服务器和 Configuration Manager 同步(如果使用)。 如果使用 Configuration Manager,请务必在 Configuration Manager 控制台中同步到最新版本的更新,以便客户端会看到 WSUS 具有当前和有效的更新。

若要断开客户端的连接,请使用以下方法之一。

方法 1:创建测试应用程序池

  1. 右键单击 Internet Information Services (IIS) 管理器区域中的应用程序池,然后选择“添加应用程序池以创建测试应用程序池。

  2. 选择“客户端 Web 服务>管理应用程序>高级设置”,然后将应用程序池更改为已创建的测试应用程序池。

方法 2:更改 WSUS 网站的端口

  1. 选择 WSUS 管理网站>编辑绑定。

  2. 更改 WSUS 控制台以连接到新端口、运行脚本并与 USS 同步。

    注意

    此方法将导致与 Configuration Manager 同步失败。

方法 3:使用防火墙规则阻止所有客户端 IP 地址或仅允许 USS 和站点服务器传入连接

客户端与 WSUS 服务器断开连接后,可以使用 (和-exclusion句点)参数运行 PowerShell 脚本 -skipdecline ,以确定可拒绝的被取代更新总数。 然后,再次运行脚本,以便 -skipdecline 实际拒绝更新。

在由于超时而无法运行 PowerShell 脚本的极端情况下,可以在显示所有更新时将取代列添加到 WSUS 控制台,然后按照以下步骤手动拒绝更新:

  1. 打开Windows 更新服务Microsoft管理控制台(MMC)。
  2. 选择“所有更新”视图。 若要执行此操作,请设置显示“任何”的“批准”状态,其中“已拒绝”状态为“任何”,然后单击“刷新”。
  3. 右键单击列标题,然后选择“ 取代”。
  4. 左键单击 “取代” 列以按取代排序。
  5. 选择并拒绝被取代的更新。

在有效更新减少到少于 7,000 个连接(但首选少于 5,000 个)后,通常会解决性能问题。 可能需要几天时间限制与 WSUS 管理网站的连接,以便客户端完成所有扫描。 我们还建议在拒绝取代的更新后重新编制数据库索引。 如果使用 Configuration Manager,则在客户端未连接时,还要在 WSUS 和 Configuration Manager 之间执行同步。

完成这些步骤后,如果 CPU 使用率仍然过高,则应限制连接。 为此,请按照下列步骤进行操作:

  1. 打开 Internet Information Services (IIS) 管理器>WSUS 管理网站>管理网站>高级设置>限制>最大并发连接数。

  2. 将值设置为 50100

  3. 任务管理器中监视 W3Wp 进程以及服务器上的总 CPU。

  4. 打开任务管理器 >资源管理器,并记下 WSUS 应用程序池的 PID 。 如果不确定哪个 w3wp 进程正在运行 WSUS 应用程序池,则可以使用 Appcmd(方法 2)轻松标识 PID。

默认情况下,PID 应每 29 小时只更改一次。 如果更改频率更高,则连接限制对于 WSUS 应用程序池的当前 CPU 和内存设置可能太高。

监视稳定的 w3wp 内存和小于 90% 的总体 CPU 使用率。 随着稳定的状态 CPU 和内存使用减少,可以缓慢地增加与 WSUS 管理网站的连接限制。 根据你处于哪种情况,内存使用量可能需要几天才能恢复到稳定状态。 增加连接限制可能需要以较小的增量进行,并在几天内进行。

参考

周二更新后 WSUS 中的高 CPU/高内存