内容分发的组件和线程
本文可帮助你了解内容分发的组件和线程。
原始产品版本: 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 | 为站点上的 Configuration Manager 数据库分配读取和写入访问权限的 Windows Management Instrumentation (WMI) 提供程序 |
SMS DP 提供程序 | SMS DP 提供程序 | SMSDPProv | 管理 DP 上的内容库操作的 Windows Management Instrumentation (WMI) 提供程序 |
SMS 代理主机 | SMS 代理主机 | CcmExec | SMS 代理主机是 Configuration Manager 客户端代理服务,该服务还托管服务器端组件,例如管理点和请求分发点 |
数据传输服务 | DataTransferService | DTS | 数据传输服务是 CcmExec 的一个组件,负责通过 BITS 下载文件。 |
分发管理器 (DistMgr) 线程
分发管理器(DistMgr)执行各种操作,将内容分发到分发点(DP)。 这些操作由不同类型的线程处理,下图说明了默认线程配置的 DistMgr 线程层次结构:
主 DistMgr 线程
用于标识的日志条目:
SMS_EXECUTIVE started SMS_DISTRIBUTION_MANAGER as thread ID 3648 (0xE40)
此线程在
SMS_Executive
服务启动时启动。 主 DistMgr 线程在启动复制处理、DP 管理器、内容清理、DP 证书监视、内容库移动、IIS 配置更改处理、DP 重新分配和升级处理线程时启动复制处理。 当包发生更改时,它还会按需启动包处理线程除了管理这些线程之外,此线程还处理对站点控制文件的更改并更新 DP 设置(配置 DP/PXE、更新注册表设置、在 DP 上创建监视/使用情况任务等)。
复制处理线程
用于标识的日志条目:
Starting thread for processing replication, thread ID = 0x1A14 (6676)
此线程由主 DistMgr 线程启动,并处理目录中的以下文件
DistMgr.box\incoming
:文件 说明 .STA 更新数据库中表中的 PkgStatus
包状态。.FWD 通过创建用于发送包的微型作业,将指定的包转发到指定的目标站点。 .DMD 分发按需请求。 将指定的包定向到指定的 DP。 .PUL 更新 DB 表中 PullDPResponse
的拉取 DP 包响应。注意
此线程是单线程的,不会创建更多线程来处理这些文件。
DP 管理器线程
用于标识的日志条目:
Starting the DP Manager thread, thread ID = 0x5D8 (1496)
此线程由主 DistMgr 线程启动,并在检测站点控制文件更改时处理删除 DP。 发生适当的站点控制文件更改时,SMSDBMON 将删除此线程处理的 DPN (DP 通知)文件
DistMgr.box
。DPN 文件用于通知 DP 更改,这涉及到 DP 删除(由 Action = 3 在
DistributionPoints
表中检测到)。注意
此线程是单线程的,不会创建更多线程来执行工作。
内容清理线程
用于标识的日志条目:
Starting the content cleanup thread, thread ID = 0x1604 (5636)
此线程由主 DistMgr 线程启动,并运行内容清理。 它通过检测数据库中的孤立内容来确定是否需要内容清理。 此线程使用默认批大小 50 作为它可以指示远程 DP 一次删除的内容数。 但是,可以通过设置以下注册表项来重写此值:
SMS\Components\SMS_DISTRIBUTION_MANAGER\RemoteContentCleanupBatchSize
DWORD 值可以介于 1 到 500 之间。
注意
如果不咨询Microsoft支持专业人员,请不要更改此值。 此线程是单线程的,不会创建更多线程来执行工作。
DP 证书监视线程
用于标识的日志条目:
Starting the DP cert monitoring thread, thread ID = 0x7290 (29328)
此线程由主 DistMgr 线程启动。 此线程处理 。启用增强的 HTTP 模式时,CER 文件和在 IIS 中配置证书绑定。 此模式需要在 IIS 中使用 Configuration Manager 生成的证书。
注意
此线程是单线程的,不会创建更多线程来执行工作。
内容库移动线程
用于标识的日志条目:
Starting the content library move thread, thread ID = 0x11D6C (73068)
此线程由主 DistMgr 线程启动,并将内容库移到新位置后 。CML 文件已删除
DistMgr.box
。注意
此线程是单线程的,不会创建更多线程来执行工作。
IIS 配置更改处理线程
用于标识的日志条目:
Starting the IIS config change processing thread, thread ID = 0x408C (16524)
此线程由主 DistMgr 线程启动,并处理在删除
DistMgr.box
IIS 文件后为标准和拉取分发点配置 IIS 虚拟目录。 此线程读取IISConfigChangeThreadLimit
组件的站点控制文件 (SCF) 属性SMS_DISTRIBUTION_MANAGER
,以确定可以同时执行 IIS 更改的线程数。 SCF 属性的IISConfigChangeThreadLimit
默认值为 50,但如有必要,可以更改该值。 但是,如果由于某种原因不存在此 SCF 属性,则使用IISConfigChangeThreadLimit
默认值 50。注意
此线程会创建更多线程来执行 DP IIS 配置更改。 每个工作线程处理特定 DP 的 IIS 虚拟目录的配置。
DP 重新分配线程
用于标识的日志条目:
Starting the shared DP reassignment thread, thread ID = 0x9C0C (39948)
此线程由主 DistMgr 线程启动,并在某个时间处理标准分发点和拉取分发点的 DP 重新分配。删除 DPU 文件
DistMgr.box
。 此线程读取SharedDPImportThreadLimit
组件的站点控制文件 (SCF) 属性SMS_DISTRIBUTION_MANAGER
,以确定可以同时执行 DP 重新分配的线程数。 SCF 属性的SharedDPImportThreadLimit
默认值为 50,但如有必要,可以更改该值。 但是,如果由于某种原因不存在此 SCF 属性,则使用SharedDPImportThreadLimit
默认值 50。注意
此线程会创建更多线程来执行 DP 重新分配。 每个工作线程处理特定 DP 的重新分配。
升级处理线程
用于标识的日志条目:
Starting the DP upgrade processing thread, thread ID = 0x1968 (6504)
此线程由主 DistMgr 线程启动,并处理标准和拉取分发点的 DP 安装和升级。 它调用
spGetDPsForUpgrade
获取需要升级的 DP 列表。 此线程读取DPUpgradeThreadLimit
组件的站点控制文件 (SCF) 属性SMS_DISTRIBUTION_MANAGER
,以确定可以同时执行 DP 安装/升级的线程数。 SCF 属性的DPUpgradeThreadLimit
默认值为 50,但如有必要,可以更改该值。 但是,如果由于某种原因不存在此 SCF 属性,则使用DPUpgradeThreadLimit
默认值 5。注意
此线程会创建更多线程来执行 DP 安装/升级工作。 每个工作线程处理特定 DP 的安装/升级。
包处理线程
用于标识的日志条目:
Started package processing thread for package 'PKGID', thread ID = 0x8E8 (2280)
这些线程由主 DistMgr 线程启动。 包处理线程数由软件分发组件配置属性中的包线程设置的最大数目决定。 每个包处理线程执行包内容的哈希处理,并创建内容的压缩副本。
注意
尽管所有包处理线程同时运行,但它们负责哈希和压缩包源。 压缩有一个关键部分,这意味着一次只能压缩一个线程。 如果创建并分发了一堆新的大型包,则每个包线程可以在链中阻塞,等待轮次获取压缩锁。
根据包操作(添加/更新/删除),每个包处理线程也会创建:
- 用于创建包传输管理器作业的 DP 线程,用于在 DP 上添加/更新内容。
- DP 线程指示远程分发点从内容库中删除内容。
每个包处理线程可以创建的 DP 线程数取决于软件分发组件配置属性中每个包设置的最大线程数。
注意
包处理线程是多线程的,每个包处理线程创建更多线程来执行工作。 每个工作线程处理 DP 的添加/更新/删除操作。
分发管理器线程配置
所有 Configuration Manager 站点(包括管理中心站点)都允许配置可用于将内容分发到分发点(DP)的线程数。 此配置特定于每个站点,可通过右键单击站点节点下的站点并选择“配置站点组件>软件分发”来访问。 下面是默认配置:
在大多数情况下,只会关注每个包设置的最大包数和最大线程数。
- 最大包数:指定 ConfigMgr 可以同时发送到 DP 的最大包数。 指定的值应介于 1 和 50 之间。
- 每个包的最大线程数:指定分发期间分配给每个包的最大线程数。 指定的值应介于 1 和 999 之间。
包的最大数目=3 和每个包的最大线程数=5 的默认配置也可以引用为 3x5。 这就是工作流中通常表示线程配置的方式。
这确实意味着什么
对分发管理器的影响 (DistMgr)
使用默认线程配置 3x5,DistMgr 可以同时处理三个包,并为每个包使用最多 5 个线程,使它最多可以使用 15 个线程来执行工作。 下面是假设我们需要分发到 5 个以上的 DP 的三个以上的包,这如何分解:
若要处理每个单个包,主 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 下载内容。 因此,请求 DP 的 PkgXferMgr 线程的生存期较短。 PkgXferMgr 确实启动另一个线程来执行拉取 DP 轮询(基于配置的轮询间隔),以检查作业的进度。 但是,这也是一个快速的操作,这些线程也具有较短的生存期。
选择正确的值
若要确定这些设置的适当值,首先需要了解 Configuration Manager 层次结构。 让我们考虑以下假设的 Configuration Manager 环境:
- 管理中心站点:CS1
- 主站点:PS1
- 向 PS1 报告的常规分发点数:200
- 包总数:1000
在此环境中,默认线程配置(3x5)表示,如果新包需要分发到所有 200 个 DP,我们将一次只处理 5 个 DP。 DP 线程退出后,另一个 DP 线程将生成,进程将继续,直到处理所有 DP。 此过程需要一些时间来循环访问所有 200 个 DP。
若要对此进行优化,我们首先需要提出几个问题:
- 你预计平均同时添加/更新/分发多少个包?
- 站点中有多少个 DP? 站点服务器和这些 DP 之间的网络配置如何?
假设第一个问题的答案为 5,第二个问题的回答是 200,网络连接良好,理论上可以将包的最大数目设置为 5,每个包的最大线程数设置为 200,从而允许 Configuration Manager 同时向所有 200 个 DP 发送最多 5 个包。 但是,这意味着,当负载超过平均负载时,最多可以创建 1000 个线程,即许多线程。 更多线程通常很好,但并非总是因为正在执行的工作也依赖于硬件和网络配置。 线程过多有时会导致瓶颈并降低速度,而不是改进它们。
配置这些设置时要记住的最重要事项是 找到平衡点。 对于上面的示例,合理的选项是将线程配置设置为 5x100 (甚至 5x50 ,具体取决于硬件/网络),这仍允许 Configuration Manager 同时处理 100 个不同包的 100 个 DP。 使用这些设置,在高负载期间可以生成的最大线程数不会超过 500。
注意
作为一般准则,建议线程总数不超过 750。 这意味着可以将线程配置设置为 3x250、 5x150、 10x75 等。
在同一层次结构中,可能会遇到在环境中引入新 DP 的情况,并且需要将所有 1000 个包分发到 DP。 在这种情况下,5x100 的线程配置不会有效,因为我们一次只能处理 5 个包,并且处理 1000 个包需要相当长的时间。 在此方案中,可以选择以下任一项:
- 暂时将线程配置设置为 更适合当前要求的 50x10 ,但考虑到我们有 200 个 DP,从长远来看,这不是一个不错的选择。
- 将线程配置永久设置为 20x25 之类的内容,可提供更好的平衡,并在需要将更多包转到少数 DP 的情况下提供类似的性能,以及少数包需要转到多个 DP 的方案。
重要
线程配置的值没有设置建议;它因每个环境而异,应在了解环境和要求后进行设置。 总是记得 找到平衡!
发送方线程配置
每个 Configuration Manager 站点(包括管理中心站点和辅助站点)都有一个发送方。 发送程序管理从一个站点到一个目标站点的网络连接,并且还可以同时与多个站点建立连接。 为连接到站点,发送程序使用指向站点的文件复制路由来标识要用于建立网络连接的帐户。 发送方还使用此帐户将数据写入目标网站的 SMS_SITE
共享。
默认情况下,发送方使用多个并发线程将数据写入目标站点。 每个并发线程都可以将基于文件的不同对象传输到目标站点。 默认情况下,当发送方开始发送对象时,它会继续为该对象写入数据块,直到发送整个对象。
所有 Configuration Manager 站点都允许配置发送方组件可用于同时将数据发送到其他站点的线程数。 此配置特定于每个站点,可以通过选择“发件人”选项卡从“站点”节点下的“站点属性”访问。下面是默认配置:
所有网站:此发件人允许的最大同时通信数。 默认值为“5”。 这些通信可以发往不同的站点或同一站点的所有站点,但受每个站点中指定的最大值的限制。
每个站点:允许到任何单个目标站点的最大同时通信数。 默认值为 3。
注意
配置与其他站点通信时要使用的并发发送线程总数时,发送线程总数应配置为大于为每个站点设置配置的线程数。 如果发送线程总数等于配置为为每个站点使用的数字,并且接收站点不可用,则可能会导致所有发送线程在尝试与不可用站点通信时使用,并阻止与其他站点进行站点到站点通信。
这意味着什么
在“所有站点”下指定的值定义发送方可用于将数据并发发送到其他站点的线程总数。 除了所有站点的线程总数外,可以在“每个站点”下分配可用于将数据发送到任何一个目标站点的最大线程数。 默认情况下,每个站点配置为使用五个并发线程,其中三个线程可用于将数据发送到任何一个目标站点。 增加此数字时,可以通过启用 Configuration Manager 同时传输更多文件来提高站点之间的数据的吞吐量。 提高此数字还会提高对站点之间的网络带宽的要求。
选择正确的值
若要确定这些设置的适当值,首先需要了解 Configuration Manager 层次结构。 让我们考虑以下假设的 Configuration Manager 环境:
- 管理中心站点:CS1
- 主站点:PS1
- 主站点:PS2
- 主站点:PS3
- 主站点:PS4
在此环境中,默认发送方线程配置将允许总共使用 5 个线程。 在这 5 个线程中,3 个可用于 4 个目标主站点中的任何一个。 如果管理员向所有这些网站发送 3 个,则发送方可能会最终为其中一个站点使用三个线程(假设 PS1),其余站点只剩下 2 个线程。 在剩余的 2 个线程中,发送方可能会对 PS2 使用 1,另一个线程用于 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 中配置内容管理。
这如何影响发送方和 PkgXferMgr 线程
为站点启用带宽控制后,发送方组件将忽略站点的发送方线程配置,并且仅使用该站点的一个线程。 同样,当为 DP 启用带宽控制时,PkgXferMgr 将忽略线程配置,并且仅对 DP 使用一个线程。
注意
即使 可用带宽限制设置为 100%,也是如此。
当带宽控制生效时, PkgXferMgr.log 将记录以下行之一:
计划编制:
~地址到 DPNAME.CONTOSO.COM 当前处于带宽控制之下,因此只允许一个连接,将发送请求返回到池。
脉冲模式:
~Addres 到 DPNAME.CONTOSO.COM 当前处于脉冲模式,因此只允许一个连接。
~放弃发送请求,因为脉冲模式下只允许一个连接。
配置带宽限制时,Sender.log将显示类似的条目。