Sap 初始调用1分钟后BizTalk延迟增加

Sap 初始调用1分钟后BizTalk延迟增加,sap,biztalk,low-latency,biztalk-2016,Sap,Biztalk,Low Latency,Biztalk 2016,我正在BizTalk server 2016中运行一个业务流程,带有一个双向WCF接收端口(IIS)和一个SAP适配器发送端口,用于在SAP中运行轻型查询。我正在努力优化性能 我的问题是:当我第一次调用编排时(在我重新启动主机实例之后),第一次调用大约需要1秒,我知道这是因为它正在将程序集加载到内存中。随后的通话速度要快得多,大约需要200-300毫秒。但是,在第一次通话后1分钟,下一次通话又需要1秒钟。模式是: 1st call 1 s new call 300 ms new call 300

我正在BizTalk server 2016中运行一个业务流程,带有一个双向WCF接收端口(IIS)和一个SAP适配器发送端口,用于在SAP中运行轻型查询。我正在努力优化性能

我的问题是:当我第一次调用编排时(在我重新启动主机实例之后),第一次调用大约需要1秒,我知道这是因为它正在将程序集加载到内存中。随后的通话速度要快得多,大约需要200-300毫秒。但是,在第一次通话后1分钟,下一次通话又需要1秒钟。模式是:

1st call 1 s
new call 300 ms
new call 300 ms
...
new call 1 s (1 minute after the first call)
new call 300 ms
new call 300 ms
...
就好像一分钟后记忆中有什么东西被清除了,但我不明白为什么?我调整了配置文件,使程序集永远不会从内存中卸载,并且我将消息和业务流程的池缩短到了50ms


是否有任何其他配置需要更改?

如果业务流程AppDomain未处于活动状态,则它每隔一段时间就会自动中断一次

如果您查看文档,可以选择配置这种情况发生的频率,特别是本节似乎就是您要查找的内容:

在本节中,用户可以为创建的任何应用程序域指定解除UALT配置,该应用程序域没有与其关联的命名配置(请参阅下面的AppDomainSpecs)

SecondsEmptyBeforeShutdown是应用程序域在卸载之前为空(即,它不包含任何业务流程)的秒数。指定-1表示应用程序域永远不应卸载,即使是空的

类似地,SecondsIdleBeforeShutdown是应用程序域在卸载之前处于空闲状态(即,它只包含可删除的业务流程)的秒数。指定-1表示应用程序域在空闲但不为空时不应卸载。当一个空闲但非空的域被关闭时,所有包含的实例将首先被脱水



请注意,这确实应该进行彻底的测试(特别是在正常生产负载下至少测试几个小时)。它可能会对内存使用和总体性能产生其他不必要的副作用。在您的场景中,1秒的代价真的太高了吗?

60秒间隔看起来像BizTalk缓存刷新间隔,默认情况下具有此值。虽然它不会重新加载程序集,而且大部分是配置,但它实际上可能会给处理时间增加一些微小的比特。

请参见

谢谢您的回复。我们正在尝试创建一个低延迟主机,它将处理来自网站的请求。我已经做了你提到的改变。但是默认值是20分钟,所以它不负责我们每60秒的体验。啊,是的。我看得太快了谢谢Gediminas。我已经监视了正在加载的程序集,并且没有新的程序集正在加载。我认为这与Biztalk在生命周期结束时必须重新创建SQL连接有关。启用跟踪后,我可以看到业务流程和管道(在IIS中运行)所花费的时间都比正常时间长(大约多500毫秒)。
<DefaultSpec SecondsIdleBeforeShutdown="1200" SecondsEmptyBeforeShutdown="1800">