0

我在 BizTalk server 2016 中运行业务流程,使用 2 路 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
...

就像一分钟后从内存中清除了某些东西,但我不明白为什么?我已经调整了配置文件,因此程序集永远不会从内存中卸载,并且我将消息和编排的池化时间缩短到 50 毫秒。

我还需要更改其他配置吗?

4

2 回答 2

0

如果 Orchestration AppDomain 不处于活动状态,它会每隔一段时间自行关闭。

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

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

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

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

<DefaultSpec SecondsIdleBeforeShutdown="1200" SecondsEmptyBeforeShutdown="1800">

请注意,这确实应该进行彻底测试(特别是在正常生产负载下一次至少测试几个小时)。它可能会在内存使用和整体性能方面产生其他不需要的副作用。在你的场景中,1 秒的代价真的太高以至于不能经常支付吗?

于 2017-05-30T13:46:01.823 回答
0

60 秒间隔似乎是 BizTalk 缓存刷新间隔,默认情况下具有此值。尽管它不会重新加载程序集和主要是配置,但它实际上可能会增加处理时间。
请参阅配置缓存刷新间隔

于 2017-05-31T09:25:30.237 回答