我是BizTalk的新手,最近遇到了一些问题,其中biztalk业务流程卡住了,我被迫重启主机实例以重新获得消息处理。
我发现奇怪的是通过测试,我可以看到任务管理器中的biztalk主机实例占用了大量内存,即使在业务流程进入脱水模式后也不会释放它们。
是不是因为我在biztalk编排中做了一些糟糕的编程?
仅供参考我的业务流程使用实用程序DLL调用WCF从SQL Server 2008 R2中检索数据。
Orchestration使用计时器实用程序进行编程,以便在非运行四小时后退出。
设置:仅供参考,我正在使用biztalk 2009,在windows server 2008 r2,24GB内存,intel xeon处理器。
嗯,你们是正确的,正如所料!
重新启动主机实例并没有真正帮助解决这个问题,截至目前我仍然不知道它有什么问题。
我已经进行了调试诊断运行以获取内存转储,我相信内存正被biztalk应用程序的模式和其他部分使用,所以我认为它可能很好。
我偶然发现long list of cumulative updates,并试图查看我需要安装哪一个来解决此问题。
谢谢!
答案 0 :(得分:7)
在.Net帮助程序代码中执行所有Wcf和SQL调用肯定是不最佳实践,并且都不会定期重新启动主机实例。
有什么方法可以重新考虑您的代码以使用开箱即用的适配器?如果做不到这一点,请尝试使用memory profiler查看内存泄漏的位置。
答案 1 :(得分:4)
我不认为Biztalk需要每天重启。
我会确保您的DLL中的所有资源都得到适当的清理/处理。然后在测试中做一些测量,看看是不是你的代码在服务器上加载了。
答案 2 :(得分:2)
您不应每天重新启动BizTalk主机实例,BizTalk是一种企业产品,通常用于关键任务应用程序。
当你说很多记忆是什么意思?默认情况下,BizTalk主机实例进程内存消耗的限制设置是可用系统内存的25%。因此,如果您的服务器具有32GB内存,BizTalk服务器将认为在应用任何限制条件之前可以安全地达到8GB的消耗。
您可以使用Process Monitor(http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx)深入挖掘BizTalk主机实例并查看内存消耗的位置。根据我的经验,它总会产生一些自定义代码。查看您的自定义DLL,看看他们是否使用XmlDocument等技术来加载一个大文档来解析某些值。