排查状态消息处理性能问题

适用于:Configuration Manager

状态消息传送是 Configuration Manager 中最重要的报告机制之一。 它负责应用程序和更新部署统计信息,以及许多其他流。

本文重点介绍处理传入状态消息和更新数据库的SMS_STATE_SYSTEM组件(也称为 StateSys)。

有关状态消息系统的详细信息,请参阅 Configuration Manager 中的状态消息传送说明。

现象

Configuration Manager 管理员注意到报告软件更新符合性和应用程序部署时出现重大延迟。 在这种情况下, <Configuration Manager Installation Directory>\Inboxes\auth\statesys.box\incoming 文件夹包含大量文件。 例如,有数百万个文件。

下面是按以下方式筛选 InboxMon.log 文件时 StateSys的示例输出:

06-11-2021 08:53:35.276    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\HIGH IS 13360.~
06-11-2021 08:53:35.401    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\LOW IS 347.~
06-11-2021 08:53:36.556    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING IS 1087076.~
06-11-2021 09:00:00.785    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\HIGH IS 7.~
06-11-2021 09:00:01.170    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\LOW IS 213.~
06-11-2021 09:00:02.885    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING IS 1099177.~
06-11-2021 09:15:00.135    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\HIGH IS 23.~
06-11-2021 09:15:00.240    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING\LOW IS 0.~
06-11-2021 09:15:01.130    SMS_INBOX_MONITOR    8972 (0X230C)    FILE COUNT FOR DIRECTORY F:\PROGRAM FILES\MICROSOFT CONFIGURATION MANAGER\INBOXES\AUTH\STATESYS.BOX\INCOMING IS 1117189.~

文件数可能会继续增长,或者文件在合理的时间范围内处理速度可能太慢。 长时间的服务器中断或大规模部署后,可能会出现此问题。

原因

传入的文件是通常文件扩展名为或.smw.smx纯文本 XML 文件。 这些文件包含客户端 ID(称为 SMS GUID)和有效负载。 通常,每个文件都包含多个消息。 这是因为客户端会在发送消息之前对消息进行批处理(默认值为 15 分钟)。

StateSys 旨在分批选取文件、分析 XML 文件并更新数据库。 更新数据库时,它会运行 Configuration Manager 提供的一些 SQL 存储过程和 CLR 程序集。 因此,它主要取决于 SQL Server 后端性能。 当 SQL Server 长时间与其他任务饱和时,此条件可能会导致状态消息累积。

同时,StateSys 有一些设计,可能会阻止它赶上近百万文件的积压工作:

  • 文件按字母顺序进行处理,而不是按“先出(FIFO)”顺序处理。 由于管理点为文件生成随机名称,因此可能会在旧消息之前处理新消息。 StateSys 对这种情况具有复原能力。
  • 每个消息都包含一个序列号。 StateSys 维护表中 SR_MissingRanges 存储的缺失范围的列表。 如果缺少的范围超过两天(默认值),StateSys 会为客户端重新同步。 重新同步会导致客户端发送与所有其他消息相同的队列的大型 XML 文件。 如果新状态消息始终比旧消息早两天进行处理,则此条件可能会成为某些客户端的恶性循环,并导致频繁重新同步。

解决方法

若要排查性能问题,请执行以下步骤:

  1. 确定并消除导致积压的问题。

    如果问题是大规模部署,请暂时禁用部署,或重新考虑部署策略。 例如,如果部署软件更新组 1,000 个更新,则它可能会为每个更新、每个状态(默认)、每个客户端和整个组生成强制状态消息。 这可以创建数百万条状态消息。

    如果问题 SQL Server 性能不佳,请与数据库管理员协作解决此问题。 如果有许多文件无法处理,请先调查根本原因。

  2. 建立 Configuration Manager 性能基线,了解环境的常规处理速率。 StateSys 的特定性能计数器包括“已处理的消息记录/分钟”和“消息文件记录预处理器/分钟”。通常,这些平均数万人。 如果没有要处理的文件,这两个计数器将减少到 0。

    StateSys 的性能计数器。

    如果通常的处理速率不足以处理积压工作,请转到下一步。

  3. 更改SMS_STATE_SYSTEM组件的内部设置

    警告

    如果更改这些设置不正确,则可能会出现严重问题。 Microsoft无法保证这些问题可以解决,并且不支持此方案。 自行修改设置。 建议在解决积压工作后还原这些设置。

    必须至少具有 Configuration Manager 基础结构管理员权限才能修改这些设置。

    1. 使用 Windows Management Instrumentation Tester 工具(Wbemtest)连接到 SMS 提供程序。 选择“连接,在“命名空间”下输入站点服务器,然后选择“连接”。 输入 root\SMS\site_<site code> 本地连接,或输入 \\MachineName\root\SMS\site_<site code> 远程连接。

      连接到 SMS 提供程序。

    2. 选择 “查询”,输入以下查询,然后选择“ 应用” :

      SELECT * FROM SMS_SCI_COMPONENT WHERE ITEMNAME = 'SMS_STATE_SYSTEM|SMS SITE SERVER'
      

      此查询返回安装了SMS_STATE_SYSTEM组件的 Configuration Manager 站点的列表。

      WMI 查询结果。

    3. 双击要更改其设置的网站,然后双击站点>/StateSys 实例的属性<列表中的 Props

      双击“属性”。

    4. 若要查看此实例的嵌入属性列表,请选择“ 查看嵌入”。

      查看嵌入的属性。

    5. 双击每个嵌入属性以检查属性名称和值。 查找名称为 Loader Threads 和值 4 的属性。

      加载程序线程。

    6. 双击 “值”,将值增加到 16。 选择“保存属性”,然后选择“保存对象”。

      增加加载程序线程。

    7. 查找名为 Min Missing Message Age 和值 2,880(分钟)的另一个嵌入属性

      缺少消息的最小期限。

    8. 双击 “值”,将值增加到 10,080 (7 天),以防止不必要的重新同步。 选择“保存属性”,然后选择“保存对象”。

    9. 在 Props 的属性编辑器对话框中,选择“保存属性”。

      Save 属性。

    10. StateSys 实例的对象编辑器 对话框中,选择“ 保存对象”。

    11. 关闭 Wbemtest。

    12. 使用 Configuration Manager Service Manager 停止,然后重启SMS_STATE_SYSTEM组件。

      重启SMS_STATE_SYSTEM组件后,新设置将记录 StateSys.log,如下所示。

      08-24-2021 21:24:16.574    SMS_STATE_SYSTEM    19380 (0X4BB4)    USING THE FOLLOWING CONFIGURATION PROPERTIES FROM THE SITEF CONTROL FILE:
      08-24-2021 21:24:16.575    SMS_STATE_SYSTEM    19380 (0X4BB4)      SITE CODE                              CB1
      08-24-2021 21:24:16.575    SMS_STATE_SYSTEM    19380 (0X4BB4)      PARENT SITE CODE
      08-24-2021 21:24:16.576    SMS_STATE_SYSTEM    19380 (0X4BB4)      LOADER THREADS                         16
      08-24-2021 21:24:16.576    SMS_STATE_SYSTEM    19380 (0X4BB4)      INBOX POLLING INTERVAL (SECS)          900
      08-24-2021 21:24:16.577    SMS_STATE_SYSTEM    19380 (0X4BB4)      LOADER CHUNK SIZE (KB)                 256
      08-24-2021 21:24:16.578    SMS_STATE_SYSTEM    19380 (0X4BB4)      MAX CHUNKS FETCHED                     100
      08-24-2021 21:24:16.578    SMS_STATE_SYSTEM    19380 (0X4BB4)      VERBOSE LOGGING                        NO
      08-24-2021 21:24:16.579    SMS_STATE_SYSTEM    19380 (0X4BB4)      MIN RESYNC PERIOD (HOURS)              72
      08-24-2021 21:24:16.579    SMS_STATE_SYSTEM    19380 (0X4BB4)      RESYNC CHECK INTERVAL (MIN)            15
      08-24-2021 21:24:16.580    SMS_STATE_SYSTEM    19380 (0X4BB4)      MIN MISSING MESSAGE AGE (MIN)          10880
      08-24-2021 21:24:16.581    SMS_STATE_SYSTEM    19380 (0X4BB4)      HEARTBEAT MESSAGE INTERVAL (MIN)       60
      08-24-2021 21:24:16.581    SMS_STATE_SYSTEM    19380 (0X4BB4)    === STATESYS HAS BEEN SUCCESSFULLY INITIALIZED. ===
      
    13. 通过性能计数器和 SQL Server CPU 负载监视处理速率改进。 如果 CPU 负载继续超过 80%,请考虑减少加载程序线程值以避免使其他 Configuration Manager 活动饱和。 相反,如果看到处理速度增加几乎没有 CPU 成本,请增加线程数。

详细信息

Microsoft顶级服务提供以下主动交付:

请联系客户成功客户经理(CSAM),获取顶级支持合同,以计划这些预订。