BizTalk Server 如何实现主机阻止

BizTalk Server主机限制机制持续监视某个限制条件,计算限制条件的严重性,并根据计算的严重性逐步应用主机限制。 限制机制是自我优化,默认配置选项适用于大多数BizTalk Server处理方案。 BizTalk Server主机限制公开了多个可配置的选项,这些选项可用于针对特定方案优化限制。 有关更改这些配置选项的信息,请参阅 如何修改主机设置

主机阻止算法的组成部分

BizTalk Server在应用主机限制时使用以下算法:

  1. 持续监视以下参数以确定它们是否超出特定阈值。 如果参数值超出该参数的阈值,则阻止条件成立。

    • 占用的内存量(系统范围的内存和主机进程内存)。

    • 要送达或处理的进程内消息数(用于出站阻止的阈值)。

    • 使用的线程数。

    • 数据库大小,按所有主机队列表中的项数以及后台处理和跟踪表中的项数来衡量。

    • 并行数据库连接数。

    • 消息发布(入站)和送达或处理(出站)速率。

  2. 确定阻止条件的严重性。 阻止条件按严重性排列如下(从最严重到最不严重):

    • 占用的主机进程内存超出阈值。

    • 进程内消息数超出阈值。

    • 使用的线程数超出阈值。

    • 数据库大小超出阈值。

    • 其他所有阻止条件。

  3. 基于阻止条件的严重性以渐进方式应用阻止。 随着严重级别的提高,也将更为主动地应用阻止。 渐进式阻止按如下方式来实现:

    • 检测到一个或多个阻止条件并指定严重性。

    • 基于严重性最高的条件发出实现阻止的指令。 根据阻止条件,如果该条件持续存在,则可能会降低各种线程池的大小,并可能会通过冻结正在运行的业务流程来释放内存。

    • 根据消息是入站还是出站,在发布或处理消息时应用延迟。 延迟时间的长短与阻止条件的严重性成比例;因此,与严重性较低的阻止条件相比,严重性较高的阻止条件将会产生更长的阻止时间。 随着阻止条件的变化,将根据阻止机制在特定范围内延长和缩短此延迟时间。 当前延迟期通过 消息传递延迟 (毫秒) 消息发布延迟 (毫秒) BizTalk:Message 代理 性能对象类别关联的性能计数器公开。 这些性能对象计数器记录在 主题主机限制性能计数器中。

    • 阻止机制继续检查是否存在阻止条件。 如果阻止条件得以缓解,则取消对阻止的消息的阻止,并允许线程池和其他资源在不受限制的模式下工作。 如果系统继续工作并且不存在任何阻止条件,则将大幅度缩短延迟时间。 如果阻止条件持续存在,则延迟时间将根据该条件的严重性按比例递增,并对后续消息应用更长时间的延迟。

    • 如果延迟时间已过,则将不再进行阻止。

阻止条件的类型

有三种主要类型的限制条件:基于速率、基于资源和业务流程。

  1. 基于速率的限制 分为两类:已发布) 的入站 (和) 传递的出站 (:

    • 对于) 消息发布的入站 (,如果主机实例的消息发布传入速率超过消息发布传出速率*,则BizTalk Server限制消息发布) (%。 可以在“消息发布限制设置”对话框中配置“速率超速因子 (%) ”参数。 对入站消息进行基于速率的阻止主要是通过在将消息成批发布到 MessageBox 数据库之前引入延迟来实现的。 不会采取其他任何措施来实现对入站消息的基于速率的阻止。

    • 对于) 消息传递的出站 (,如果主机实例的消息传送传入速率超过消息传递传出速率 * 指定的速率超速因素 (%) 值,BizTalk Server将限制消息的传递。 可以在“消息处理限制设置”对话框中配置“速率超速因子 (%) ”参数。 对出站消息进行基于速率的阻止主要是通过在将消息从内存中队列中删除并将消息送达端点管理器 (EPM) 或业务流程引擎以便进行处理之前引入延迟来实现的。 不会采取其他任何措施来实现对出站消息的基于速率的阻止。

      有关速率超速因素和其他基于速率的限制值的详细信息,请参阅 如何修改基于速率的限制设置

  2. 基于资源的限制 监视系统资源,例如线程、内存和数据库大小,并且可以应用于任何服务类。 有关基于资源的限制值的详细信息,请参阅 如何修改基于资源的限制设置

  3. 业务流程限制 可以防止冻结以及何时暂停/恢复订阅。 有关业务流程限制值的详细信息,请参阅 如何修改业务流程限制设置

阻止条件触发器、操作和缓解策略

本部分介绍了各种阻止条件的触发器、阻止机制生成的操作以及可用来缓解阻止条件的措施。

入站阻止

BizTalk 阻止机制对业务流程引擎 (XLANG) 和入站适配器应用入站阻止。

使用与 BizTalk:MessageAgent 性能对象类别关联的消息发布限制状态和消息发布限制状态持续时间计数器来测量当前限制状态和限制持续时间。 有关可用主机限制性能计数器的详细信息,请参阅 主机限制性能计数器

入站阻止可导致入站消息在源积压。 如果对接收适配器应用入站阻止,则接收适配器可能会停止接收消息,直到阻止条件得以缓解。

消息发布

阻止状态
阻止条件的触发器 采取的阻止操作 缓解策略 性能对象 性能计数器
2 主机实例的消息发布传入速率超过消息发布传出速率\* 指定的速率超速因素 (%) 值。 数据库无法保持发布速率。 在动态计算的时间段内阻止发布线程,直到 消息发布传入速率消息发布传出速率 * 指定的 速率超速因素 (%) 值。 使用性能计数器确定消息发布传入速率和消息发布传出速率。 为你的环境使用适当的加速因子。

验证为 “采样”窗口持续时间最小样本数 参数提供的值是否适合你的方案。

有关这些参数的详细信息,请参阅 如何修改基于速率的限制设置
BizTalk:MessageAgent Message publishing incoming rate

Message publishing outgoing rate
4 进程内存超出指定阈值。

如果要发布的批具有很高的内存要求,或者正在处理消息的线程过多,则可能发生此情况。
减少由 EPM 使用的线程池的大小。

阻止 EPM 线程以防止处理新的消息批。

如果将批中的消息保存到数据库具有很高的内存要求,则在将消息保存到数据库之前,也会对发布线程应用渐进式延迟。

是否出于进程内存压力而阻止发布批取决于多种因素,包括批中的消息数,或者批中是否存在冻结或消息删除命令。
考虑通过减少 EPM 线程池和/或适配器批的大小来降低负荷量。

如果进程没有消耗过多的内存,请考虑提高主机的进程 虚拟 阈值。

有关更改 进程虚拟 值的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent High process memory

处理内存使用率 (MB)

Process memory usage threshold (MB)
6 主机消息队列大小、后台处理表大小或跟踪表大小超出指定阈值。

此条件的可能原因包括:

- BizTalk Server用于维护BizTalk Server数据库未运行或运行缓慢的 SQL 代理作业。
- 下流组件未及时处理来自内存中队列的消息。
- 挂起的消息数很高。
- 已达到系统的最大可持续负载。
减少由 EPM 使用的线程池的大小。

阻止 EPM 线程以防止处理新的消息批。

在将消息保存到数据库之前,也会对发布线程应用渐进式延迟。
确保 BizTalk Server 用于维护 BizTalk Server 数据库的 SQL 代理作业正在运行且没有故障。

根据需要终止和恢复挂起的实例。

在考虑到托管 BizTalk 数据库的 SQL Server 的空间要求的情况下,增加 DB 中消息计数 的默认值。

如果适当调整数据库大小以处理其他消息积压工作,请考虑增加 后台处理程序乘数跟踪数据乘数 值,以允许在后台处理程序和跟踪表中增加积压工作。

有关更改值的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent

BizTalk:Message Box:General Counters

BizTalk:Message Box:Host Counters
MessageAgent /Database size

Message Box:General Counters /Spool size

Message Box:General Counters /Tracking data size

Message Box:Host Counters/Host queue – length

Message Box:Host Counters/Host queue - suspended msgs – length
8 主机实例使用的数据库会话数超出指定阈值。 减少由 EPM 使用的线程池的大小。

阻止 EPM 线程以防止处理新的消息批。

在将消息保存到数据库之前,也会对发布线程应用渐进式延迟。
请考虑提高主机 的数据库连接 阈值。

有关更改此值的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent Database session
9 进程线程数超出指定阈值。 减少由 EPM 使用的线程池的大小。

阻止 EPM 线程以防止处理新的消息批。

在将消息保存到数据库之前,也会对发布线程应用渐进式延迟。
考虑调整不同线程池的大小,以确保系统不会创建大量线程。

有关修改线程池大小的详细信息,请参阅 如何修改常规设置如何修改基于资源的限制设置
BizTalk:MessageAgent Thread count

Thread count threshold
5 系统内存超出指定阈值。 减少由 EPM 使用的线程池的大小。

阻止 EPM 线程以防止处理新的消息批。

如果将批中的消息保存到数据库具有很高的内存要求,则在将消息保存到数据库之前,也会对发布线程应用渐进式延迟。

是否出于进程内存压力而阻止发布批取决于多种因素,包括批中的消息数,或者批中是否存在冻结或消息删除命令。
考虑通过减少 EPM 线程池的默认大小和/或适配器批的大小来降低负荷量。

如果进程没有消耗过多的内存,请考虑提高主机的 全局物理 阈值。

有关更改 全局物理 阈值的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent Physical memory usage (MB)

Physical memory usage threshold (MB)

出站阻止

BizTalk 阻止机制对业务流程引擎 (XLANG) 和出站适配器应用出站阻止。

使用与 BizTalk:MessageAgent 性能对象类别关联的消息传送限制状态和消息传送限制状态持续时间计数器来度量当前限制状态和限制持续时间。 有关可用主机限制性能计数器的详细信息,请参阅 主机限制性能计数器

出站阻止可能导致消息送达延迟,消息可能会在内存中队列中堆积,并可能导致出列线程被阻止,直到阻止条件得以缓解。 当出列线程被阻止后,不会从 MessageBox 中请求任何其他消息放入内存中队列中以进行出站送达。

消息送达

阻止状态
阻止条件的触发器 采取的阻止操作 缓解策略 性能对象 性能计数器
1 主机实例的消息传送传入速率超过邮件传递传出速率 \* 指定的速率超速系数 (%)

如果处理复杂度太高,出站适配器速度太慢或者系统资源出现暂时短缺,都会导致此情况。
在动态计算的时间段内阻止传递线程,直到消息传送传入速率与 邮件传递传出率 \* 指定的 速率超速系数 (%) 值相等。 使用性能计数器确定消息送达传入速率和消息送达传出速率。 考虑适合你的环境的驱动器系数。

验证为 “采样”窗口持续时间最小样本数 参数提供的值是否适合你的方案。

有关这些参数的详细信息,请参阅 如何修改基于速率的限制设置
BizTalk:MessageAgent Message delivery incoming rate

Message publishing outgoing rate
4 进程内存超出指定阈值。

在需要占用大量内存的处理方案中、在处理大量消息时或者在发送适配器尝试同时处理大量消息时可能发生此情况。
降低向适配器或 XLANG 的消息送达速度。

根据需要,通过冻结服务实例和缩减缓存来降低进程内存占用率。

减少由 EPM 和/或消息代理使用的线程池的大小。

定期强制执行 .NET 垃圾回收 (GC)。
如果系统由于基于进程内存的阻止而没有处于空闲状态,则可能无需采取任何操作。

如果 进程内消息计数 计数器较高,并且即使存在基于进程内存的限制,CPU 利用率也不会过高,则无需执行任何其他操作。

如果系统似乎过度限制,请考虑增加与主机 的 Process 虚拟 阈值关联的值,并验证主机实例是否未生成“内存不足”错误。 如果通过增加 进程虚拟 阈值引发“内存不足”错误,请考虑减小 内部消息队列大小进程内消息 阈值的值。 此策略特别适用于大型消息处理方案。

有关这些参数的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent High process memory

Process memory usage(MB)

Process memory usage threshold (MB)

In-process message count

Active instance count
3 送达服务类别的进程内消息数超出指定阈值。

如果处理复杂度太高,出站适配器速度太慢或者系统资源出现暂时短缺,都会导致此情况。
降低向适配器或 XLANG 的消息送达速度。

减少由消息代理使用的线程池的大小。
如果发生过度限制,请考虑增加与 进程内消息 阈值关联的值。

有关此参数的详细信息,请参阅 如何修改基于资源的限制设置注意: 增加此值可能会对发送适配器性能和/或增加进程的内存使用率产生负面影响。
BizTalk:MessageAgent In-process message count

In-process message count threshold
9 进程线程数超出指定阈值。 减少由 EPM 和/或消息代理使用的线程池的大小 考虑调整不同线程池的大小,以确保系统不会创建大量线程。

有关修改线程池大小的详细信息,请参阅 如何修改常规设置如何修改基于资源的限制设置
BizTalk:MessageAgent Thread count

Thread count threshold
5 系统内存超出阈值。 降低向适配器或 XLANG 的消息送达速度。

根据需要,通过冻结服务实例和缩减缓存来降低进程内存占用率。

减少由 EPM 和/或消息代理使用的线程池的大小。
考虑通过减少 EPM 线程池的默认大小和/或适配器批的大小来降低负荷量。

如果进程没有消耗过多的内存,请考虑提高主机的 全局物理 阈值。

有关更改 全局物理 阈值的详细信息,请参阅 如何修改基于资源的限制设置
BizTalk:MessageAgent Physical memory usage (MB)