我在BizTalk server 2016中运行业务流程,具有双向WCF接收端口(IIS)和SAP适配器发送端口,以在SAP中运行轻量级查询。我试图优化效果。
我的问题是:当我第一次调用我的Orchestration时(在我重新启动Host实例之后),第一次调用大约需要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
...
在1分钟之后,事情正在从记忆中清除,但我不明白为什么?我已经调整了配置文件,因此程序集永远不会从内存中卸载,我将消息和编排池汇集到50ms。
我需要更改其他任何配置吗?
答案 0 :(得分:0)
如果Orchestration AppDomain不活动,它会偶尔撕掉它自己。
如果你查看文档here,可以选择配置这种情况发生的频率,特别是这一部分似乎正是你要找的:
在本节中,用户可以为任何创建的app域指定defualt配置,该域没有与之关联的命名配置(参见下面的AppDomainSpecs)
SecondsEmptyBeforeShutdown是在卸载之前应用程序域为空(即,它不包含任何业务流程)的秒数。指定-1表示应用程序域永远不应卸载,即使是空的。
类似地,SecondsIdleBeforeShutdown是应用程序域在卸载之前空闲的秒数(即,它仅包含可脱水的业务流程)。指定-1表示应用程序域在空闲时不应卸载但不为空。当一个空闲但非空的域被关闭时,所有包含的实例首先被脱水。
<DefaultSpec SecondsIdleBeforeShutdown="1200" SecondsEmptyBeforeShutdown="1800">
请注意,这确实应该经过彻底测试(特别是在正常生产负载下测试至少几个小时)。它可能会在内存使用和整体性能方面产生其他不必要的副作用。在您的情景中,1秒钟的价格是否真的太高了?
答案 1 :(得分:0)
60秒间隔似乎是BizTalk Cache刷新间隔,默认情况下具有此值。虽然它不会重新加载程序集并且主要是配置,但它实际上可能会为处理时间添加一些小块 请参阅Configuration Cache Refresh Interval