内容分发的组件和线程

本文可帮助你了解内容分发的组件和线程。

原始产品版本:Configuration Manager Current Branch、Microsoft System Center 2012 Configuration Manager、Microsoft System Center 2012 R2 Configuration Manager

用于内容分发的组件

下面是用于内容分发的主要组件的快速列表:

名称 组件名称 友好名称 说明
分发管理器 SMS_DISTRIBUTION_MANAGER DistMgr 管理 PkgXferMgr 的内容并创建作业
包传输管理器 SMS_PACKAGE_TRANSFER_MANAGER PkgXferMgr 将包传输到分发点
层次结构管理器 SMS_HIERARCHY_MANAGER Hman 处理并复制对站点层次结构的更改
发件人 SMS_SENDER 发件人 跨 TCP/IP 网络启动站点间通信
Despooler SMS_DESPOOLER Despooler 处理来自父站点或子站点的传入复制文件
调度 SMS_SCHEDULER 调度 创建发件人作业
数据库通知监视器 SMS_DATABASE_NOTIFICATION_MONITOR SmsDbMon 监视数据库对某些表的更改,并在负责处理这些更改的组件的收件箱中创建文件
SMS 提供程序 SMS 提供程序 SMSProv Windows Management Instrumentation (WMI) 提供程序,该提供程序为站点上的 Configuration Manager 数据库分配读取和写入访问权限
SMS DP 提供程序 SMS DP 提供程序 SMSDPProv Windows Management Instrumentation (WMI) 提供程序,用于管理 DP 上的内容库操作
SMS 代理主机 SMS 代理主机 CcmExec SMS 代理主机是Configuration Manager客户端代理服务,同时托管管理点和拉取分发点等服务器端组件
数据传输服务 DataTransferService Dts 数据传输服务是 CcmExec 的一个组件,负责通过 BITS 下载文件。

分发管理器 (DistMgr) 线程

分发管理器 (DistMgr) 执行各种操作, (DPs) 将内容分发到分发点。 这些操作由不同类型的线程处理,下图说明了默认线程配置的 DistMgr 线程层次结构:

图中显示了分发管理器线程层次结构。

  • 主 DistMgr 线程

    用于标识的日志条目: SMS_EXECUTIVE started SMS_DISTRIBUTION_MANAGER as thread ID 3648 (0xE40)

    此线程在服务启动时启动 SMS_Executive 。 main DistMgr 线程在启动时启动复制处理、DP 管理器、内容清理、DP 证书监视、内容库移动、IIS 配置更改处理、DP 重新分配和升级处理线程。 它还会在发生包更改时按需启动包处理线程

    除了管理这些线程外,此线程还处理对站点控制文件的更改,并更新 DP 设置 (配置 DP/PXE、更新注册表设置、在 DP 上创建监视/使用任务等) 。

  • 复制处理线程

    用于标识的日志条目: Starting thread for processing replication, thread ID = 0x1A14 (6676)

    此线程由 main DistMgr 线程启动,并处理目录中的DistMgr.box\incoming以下文件:

    文件 说明
    .Sta 汇报数据库中表中的PkgStatus包状态。
    .Fwd 通过创建一个用于发送包的微型作业,将指定的包转发到指定的目标站点。
    .Dmd 分发按需请求。 将指定的包定向到指定的 DP。
    .PUL 汇报 DB 表中的PullDPResponse拉取 DP 包响应。

    注意

    此线程是单线程的,不会创建更多线程来处理其中任何文件。

  • DP 管理器线程

    用于标识的日志条目: Starting the DP Manager thread, thread ID = 0x5D8 (1496)

    此线程由 main DistMgr 线程启动,并在检测站点控制文件更改时处理删除 DP。 发生适当的站点控制文件更改时,SMSDBMON 会删除此线程处理的 DPN (DP Notification) 文件 DistMgr.box

    DPN 文件用于通知 DP 更改,其中涉及在表中) 由 Action = 3 DistributionPoints 检测到的 DP 删除 (。

    注意

    此线程是单线程的,不会创建更多线程来执行工作。

  • 内容清理线程

    用于标识的日志条目: Starting the content cleanup thread, thread ID = 0x1604 (5636)

    此线程由 main DistMgr 线程启动,并运行内容清理。 它通过检测数据库中的孤立内容来确定是否需要内容清理。 此线程使用默认批大小 50 作为可以指示远程 DP 一次删除的内容数。 但是,可以通过设置以下注册表项来重写此值:

    SMS\Components\SMS_DISTRIBUTION_MANAGER\RemoteContentCleanupBatchSize

    DWORD 值可以介于 1500 之间。

    注意

    未经咨询 Microsoft 支持专业人员,请勿更改此值。 此线程是单线程的,不会创建更多线程来执行工作。

  • DP 证书监视线程

    用于标识的日志条目: Starting the DP cert monitoring thread, thread ID = 0x7290 (29328)

    此线程由 main DistMgr 线程启动。 此线程处理 启用增强 HTTP 模式时,CER 在 IIS 中文件和配置证书绑定。 此模式需要在 IIS 中使用Configuration Manager生成的证书。

    注意

    此线程是单线程的,不会创建更多线程来执行工作。

  • 内容库移动线程

    用于标识的日志条目: Starting the content library move thread, thread ID = 0x11D6C (73068)

    此线程由 main DistMgr 线程启动,并将内容库移到 后的新位置。CML 文件在 中删除DistMgr.box

    注意

    此线程是单线程的,不会创建更多线程来执行工作。

  • IIS 配置更改处理线程

    用于标识的日志条目: Starting the IIS config change processing thread, thread ID = 0x408C (16524)

    此线程由 main DistMgr 线程启动,并在 中删除 DistMgr.boxIIS 文件后处理为标准和拉取分发点配置 IIS 虚拟目录。 此线程读取 IISConfigChangeThreadLimit 组件的站点控制文件 (SCF) 属性 SMS_DISTRIBUTION_MANAGER ,以确定它可以启动以同时执行 IIS 更改的线程数。 SCF 属性的 IISConfigChangeThreadLimit 默认值为 50,但可以根据需要进行更改。 但是,如果由于某种原因而不存在此 SCF 属性,则默认值 50 用于 IISConfigChangeThreadLimit

    注意

    此线程会创建更多线程来执行 DP IIS 配置更改。 每个工作线程处理特定 DP 的 IIS 虚拟目录的配置。

  • DP 重新分配线程

    用于标识的日志条目: Starting the shared DP reassignment thread, thread ID = 0x9C0C (39948)

    此线程由 main DistMgr 线程启动,并在 出现 时处理标准和拉取分发点的 DP 重新分配。DPU 文件在 中删除DistMgr.box。 此线程读取 SharedDPImportThreadLimit 组件的站点控制文件 (SCF) 属性 SMS_DISTRIBUTION_MANAGER ,以确定它可以同时执行 DP 重新分配的线程数。 SCF 属性的 SharedDPImportThreadLimit 默认值为 50,但可以根据需要进行更改。 但是,如果由于某种原因而不存在此 SCF 属性,则默认值 50 用于 SharedDPImportThreadLimit

    注意

    此线程会创建更多线程来执行 DP 重新分配。 每个工作线程处理特定 DP 的重新分配。

  • 升级处理线程

    用于标识的日志条目: Starting the DP upgrade processing thread, thread ID = 0x1968 (6504)

    此线程由 main DistMgr 线程启动,并处理标准和拉取分发点的 DP 安装和升级。 它调用 spGetDPsForUpgrade 以获取需要升级的 DP 的列表。 此线程读取 DPUpgradeThreadLimit 组件的站点控制文件 (SCF) 属性 SMS_DISTRIBUTION_MANAGER ,以确定它可以同时执行 DP 安装/升级的线程数。 SCF 属性的 DPUpgradeThreadLimit 默认值为 50,但可以根据需要进行更改。 但是,如果由于某种原因而不存在此 SCF 属性,则默认值 5 用于 DPUpgradeThreadLimit

    注意

    此线程会创建更多线程来执行 DP 安装/升级工作。 每个工作线程处理特定 DP 的安装/升级。

  • 包处理线程

    用于标识的日志条目: Started package processing thread for package 'PKGID', thread ID = 0x8E8 (2280)

    这些线程由 main DistMgr 线程启动。 包处理线程数由软件分发组件配置属性中的“最大包线程数”设置确定。 每个包处理线程执行包内容的哈希处理,并创建内容的压缩副本。

    注意

    尽管所有包处理线程同时运行,但它们负责对包源进行哈希处理和压缩。 压缩有一个关键部分,这意味着一次只能有一个线程压缩内容。 如果创建并分发了一组新的大型包,则每个包的线程可能会阻塞在链中,等待轮到它们获取压缩锁。

    根据 (添加/更新/删除) 的包操作,每个包处理线程还会创建:

    • 用于创建包传输管理器作业的 DP 线程,用于在 DP 上添加/更新内容。
    • DP 线程,指示远程分发点从内容库中删除内容。

    每个包处理线程可以创建的 DP 线程数由软件分发组件配置属性中的“每个包的最大线程数”设置确定。

    注意

    包处理线程是多线程的,每个包处理线程会创建更多线程来执行工作。 每个工作线程处理 DPs 的添加/更新/删除操作。

分发管理器线程配置

所有Configuration Manager站点 ((包括管理中心站点) )都允许配置可用于将内容分发到分发点的线程数, (DPs) 。 此配置特定于每个站点,可通过右键单击“ 站点 ”节点下的站点并选择“ 配置站点组件>软件分发”来访问。 下面是默认配置:

软件分发组件属性窗口的屏幕截图。

在大多数情况下,你只关心包 的最大数目每个包的最大线程数 设置。

  • 最大包数:指定ConfigMgr可以同时发送到 DPs 的包的最大数目。 指定的值应介于 150 之间。
  • 每个包的最大线程数:指定在分发期间分配给每个包的最大线程数。 指定的值应介于 1999 之间。

最大 包数=3每个包的最大线程数=5 的默认配置也可以引用 3x5。 这就是工作流中通常表示线程配置的方式。

这到底意味着什么

对分发管理器 (DistMgr) 的影响

使用默认线程配置 3x5,DistMgr 可以同时处理三个包,并为每个包使用最多 5 个线程,从而允许它总共使用 15 个线程来执行工作。 假设我们有超过 3 个包需要分发到 5 个以上的 DPs,下面介绍了这一点的分解方式:

关系图显示了当线程配置 = 3x5 时 DistMgr 如何同时处理三个包。

若要处理每个单独的包,main DistMgr 线程会生成包处理线程。 此包处理线程使用 “最大包数 ”设置中的三个包处理槽中的一个。 每个包都有一个唯一的包处理线程 - DistMgr 不会为同一个包启动多个包处理线程。 这意味着三个唯一包将利用三个唯一的包处理线程。 每个包处理线程最多可以生成五个 DP 线程,以便同时将包分发到五个 DP。

对包传输管理器 (PkgXferMgr) 的影响

对于 DistMgr 创建的每个 PkgXferMgr 作业,PkgXferMgr 使用一个线程。 3x5 的线程配置意味着 PkgXferMgr 的发送容量设置为 15,这意味着 PkgXferMgr 不能同时处理超过 15 个作业,从而限制为最多 15 个线程。

线程运行时长

DistMgr 线程

DP 线程的用途是为包传输管理器创建一个作业,然后该管理器将实际内容复制到 DP。 DP 线程在创建 PkgXferMgr 作业后完成,因此 DP 线程的生存期较短。 由于这种性质,大多数情况下不需要设置主动线程配置来加快内容分发速度。 不要设置主动值,而是关注 选择正确的值 (下面) 的详细信息。

PkgXferMgr 线程

对于标准 DP,由于 PkgXferMgr 线程执行发送内容的实际工作,因此这些线程的生存期取决于包的大小。 对于较大的包,这些线程可能需要很长时间,具体取决于包大小和网络速度。 虽然这些线程可能需要很长时间才能完成,但 DistMgr 线程的生存期要短得多,这意味着 DistMgr 可以将大量作业排入 PkgXferMgr 队列,从而在队列中创建积压作业。

对于拉取 DP,PkgXferMgr 线程通知拉取 DP,要求拉取 DP 下载内容。 因此,拉取 DPs 的 PkgXferMgr 线程的生存期较短。 PkgXferMgr 会启动另一个线程,以根据配置的轮询间隔 (执行拉取 DP 轮询,) 检查作业进度。 但是,这也是一个快速操作,这些线程的生存期也很短。

选择正确的值

若要确定这些设置的相应值,首先需要了解Configuration Manager层次结构。 让我们考虑以下假设Configuration Manager环境:

  • 管理中心站点:CS1
  • 主站点:PS1
  • 向 PS1 报告的常规分发点数:200
  • 包总数:1000

在此环境中,默认线程配置 (3x5) 意味着,如果新包需要分发到所有 200 个 DPS,我们一次只处理 5 个 DPs。 一旦 DP 线程退出,另一个 DP 线程将生成,该过程将继续,直到处理所有 DP。 此过程需要一些时间来循环访问所有 200 个 DPS。

若要对此进行优化,首先需要提出几个问题:

  1. 你预计平均同时添加/更新/分发多少个包?
  2. 站点中有多少个 DP? 站点服务器与这些 DPS 之间的网络配置如何?

假设第一个问题的答案为 5,并且第二个问题的答案为 200,并且网络连接良好,则理论上可以将最大包数设置为 5将每个包的最大线程数设置为 200,使Configuration Manager最多可以同时向所有 200 个 DPS 发送 5 个包。 但是,这意味着当负载超过平均负载时,我们最多可以创建 1000 个线程,即许多线程。 更多的线程通常是好的,但并非总是如此,因为执行的工作也依赖于硬件和网络配置。 过多的线程有时可能会导致瓶颈并减慢速度,而不是改进它们。

配置这些设置时,要记住的最重要的事情是 找到平衡点。 对于上面的示例,一个合理的选项是将线程配置设置为 5x100 (甚至 5x50,具体取决于硬件/网络) 这仍允许Configuration Manager同时处理最多 100 个 DPs,用于 5 个不同的包。 使用这些设置,在高负载期间可以生成的线程的最大数目不会超过 500。

注意

作为一般准则,建议线程总数不超过 750。 这意味着可以将线程配置设置为 3x2505x15010x75 等。

在同一层次结构中,可能会遇到在环境中引入新 DP 的情况,并且需要将所有 1000 个包分发到 DP。 在这种情况下, 5x100 的线程配置不会有效,因为我们一次只能处理 5 个包,处理 1000 个包需要相当长的时间。 在此方案中,可以选择:

  • 暂时将线程配置设置为更适合当前要求的 50x10 ,但从长远来看,考虑到我们有 200 个 DP,这不是一个不错的选择。
  • 将线程配置永久设置为 类似于 20x25 ,可提供更好的平衡,并在需要将更多包转到少数 DP 以及少数包需要转到多个 DP 的情况下提供类似的性能。

重要

线程配置的值没有设置建议;它因每个环境而异,应在了解环境和要求后进行设置。 请始终记住 找到平衡点!

发送方线程配置

每个Configuration Manager站点 (包括管理中心站点和辅助站点) 都有一个发送方。 发送方管理从一个站点到目标站点的网络连接,并且可以同时建立到多个站点的连接。 若要连接到站点,发送方使用指向站点的文件复制路由来标识用于建立网络连接的帐户。 发送方还使用此帐户将数据写入目标网站的 SMS_SITE 共享。

默认情况下,发送方使用多个并发线程将数据写入目标站点。 每个并发线程都可以将基于文件的不同对象传输到目标站点。 默认情况下,当发送方开始发送对象时,它会继续为该对象写入数据块,直到发送整个对象。

所有Configuration Manager站点都允许配置发送方组件可用于将数据并发发送到其他站点的线程数。 此配置特定于每个站点,可以通过选择“发件人”选项卡,从“站点”节点下的“站点属性”访问。下面是默认配置:

屏幕截图显示ConfigMgr主站点属性窗口的“发件人”选项卡下的信息。

所有站点:此发送方允许的最大同时通信数。 默认值为 5 。 这些通信可以发往不同的站点,也可以发往同一网站,但受 “每个网站”中指定的最大值的限制除外。

每个站点:允许到任何单个目标站点的最大同时通信数。 默认值为 3

注意

配置与其他站点通信时要使用的并发发送线程总数时,发送线程总数应配置为大于为每个站点设置配置的线程数。 如果发送线程总数等于配置为每个站点使用的线程数,并且接收站点不可用,则可能会导致所有发送线程在尝试与不可用站点通信时变为使用状态,并阻止与其他站点的站点到站点通信。

含义

“所有站点”下指定的值定义发送方可用于将数据并发发送到其他站点的线程总数。 在所有 站点的线程总数中,可以在 “每个站点” 下分配可用于将数据发送到任何一个目标站点的最大线程数。 默认情况下,每个站点配置为使用五个并发线程,其中三个线程可用于将数据发送到任何一个目标站点。 增加此数字时,可以通过允许Configuration Manager同时传输更多文件来增加站点之间的数据吞吐量。 增加此数字还会增加站点之间的网络带宽需求。

选择正确的值

若要确定这些设置的相应值,首先需要了解Configuration Manager层次结构。 让我们考虑以下假设Configuration Manager环境:

  • 管理中心站点:CS1
  • 主站点:PS1
  • 主站点:PS2
  • 主站点:PS3
  • 主站点:PS4

在此环境中,默认发送方线程配置将允许使用总共 5 个线程。 在这 5 个线程中,3 个可用于 4 个目标主站点中的任何一个。 如果管理员向所有这些网站发送 3 个,则发送方最终可能会为其中一个站点使用三个线程, (假设 PS1) ,其余站点只留下 2 个线程。 在剩余的 2 个线程中,发送方可以使用 1 个用于 PS2,另一个用于 PS3,利用所有五个允许的线程,没有空间同时将数据发送到 PS4。 此时,发送方必须等待现有 5 个线程之一完成,然后才能发送更多数据。 现有线程完成后,发送方将能够使用另一个线程向 PS2/PS3/PS4 站点发送更多数据。

建议为发送方将与之通信的每个站点留出 10 个线程。 在这种情况下,CS1 站点可以与其他四个站点通信,这意味着 四个站点的“每站点 ”值 10 需要将 “所有网站 ”值设置为 40

注意

这是一般建议,这些值可能需要进一步调整,具体取决于站点需要同时发送到其他站点的包数。

带宽控制和线程

在 Configuration Manager中,可以为远程分发点以及站点的文件复制路由配置计划和设置特定的限制设置。 用于对远程分发点进行计划和限制的控制类似于标准发件人地址的设置,但在这种情况下,这些设置由名为“包传输管理器”的组件使用。

对于 站点服务器 - >DP) 的包传输管理器组件 (,限制设置是在站点服务器上的标准分发点的属性中配置的。

对于站点服务器->站点服务器<) 的发送方组件 (,限制设置在层次结构配置文件>复制下的文件复制路由的属性中配置。

注意

时间设置基于发送站点的时区,而不是分发点。

计划选项

若要限制数据,请选择时间段,然后选择以下可用性设置之一:

  • 针对所有优先级打开:指定Configuration Manager将数据发送到分发点,没有限制。

  • 允许中高优先级:指定Configuration Manager只向分发点发送中高优先级数据。

  • 仅允许高优先级:指定Configuration Manager仅向分发点发送高优先级数据。

  • 已关闭:指定Configuration Manager不向分发点发送任何数据。

    可以按优先级限制数据或关闭所选时间段的连接。

速率限制选项

这用于配置速率限制,以控制在将内容传输到分发点时使用的网络带宽。 可以从以下选项中进行选择:

  • 发送到此目标时不受限制:指定Configuration Manager将内容发送到没有速率限制的分发点。
  • 脉冲模式:指定发送到分发点的数据块的大小。 还可以指定发送每个数据块之间的时间延迟。 当必须通过低带宽网络连接将数据发送到分发点时,请使用此选项。 例如,你可能有限制,每五秒发送 1 KB 数据,而不管链接的速度或其在给定时间的使用情况如何。
  • 限制为按小时指定的最大传输速率:指定此设置,让站点仅使用配置的时间百分比将数据发送到分发点。 使用此选项时,Configuration Manager不会标识网络可用带宽,而是将发送数据的时间划分为时间片。 然后,在短时间内发送数据,之后是未发送数据的时间块。 例如,如果最大速率设置为 50%,Configuration Manager在一段时间内传输数据,然后是未发送数据的相同时间段。 数据的实际大小或数据块的大小不受管理。 相反,只管理发送数据的时间量。

有关这些设置的详细信息,请参阅在 Configuration Manager 中配置内容管理

这如何影响 Sender 和 PkgXferMgr 线程

为站点启用带宽控制后,发送方组件将忽略站点的发送方线程配置,并且仅对该站点使用一个线程。 同样,为 DP 启用带宽控制时,PkgXferMgr 将忽略线程配置,并且仅对 DP 使用一个线程。

注意

即使 将“限制可用带宽 (%) ”设置为 100%,也是如此。

带宽控制生效后, PkgXferMgr.log 将记录以下行之一:

调度:

~DPNAME.CONTOSO.COM 地址当前处于带宽控制之下,因此只允许一个连接,将发送请求返回到池。

脉冲模式:

~Addres 到 DPNAME.CONTOSO.COM 当前处于脉冲模式,因此只允许一个连接。
~放弃发送请求,因为脉冲模式下只允许一个连接。

配置带宽限制时,Sender.log将显示类似的条目。