1

我是 BizTalk 新手,最近遇到了一些问题,即 biztalk 编排卡住了,我不得不重新启动主机实例以再次获得消息处理。

我发现奇怪的是通过测试,我可以看到任务管理器中的 biztalk 主机实例占用了大量内存并且即使在编排进入脱水模式后也不会释放它们。

是因为我在我的 biztalk 编排中做的一些糟糕的编程吗?

仅供参考,我的编排使用调用 WCF 从 SQL Server 2008 R2 检索数据的实用程序 DLL。

编排使用计时器实用程序进行编程,以在四个小时非操作后退出。

设置:仅供参考,我在 windows server 2008 r2 中使用 biztalk 2009,24GB 内存,intel xeon 处理器。

更新:

好吧,你们是对的,正如预期的那样!

重新启动主机实例并不能真正解决这个问题,到目前为止,我仍然不知道它有什么问题。

我已经进行了调试诊断运行以获取内存转储,并且我相信内存正在被模式和 biztalk 应用程序的其他部分消耗,所以我认为它可能没问题。

我确实偶然发现了一长串累积更新,并试图查看我需要安装哪个来解决这个问题。

谢谢!

4

3 回答 3

7

在 .Net 帮助程序代码中执行所有 Wcf 和 SQL 调用绝对不是最佳实践,也不是定期重新启动主机实例。

有什么方法可以重构代码以使用开箱即用的适配器?如果做不到这一点,请尝试使用内存分析器来查看内存泄漏的位置。

于 2012-08-13T04:44:38.083 回答
4

我不认为 Biztalk 需要每天重新启动。

我会确保您的 DLL 中的所有资源都被适当地清理/处置。然后在测试中做一些测量,看看是不是你的代码给服务器带来了负载。

于 2012-08-13T04:09:41.660 回答
2

您不应每天重新启动 BizTalk 主机实例,BizTalk 是一种企业产品,通常用于关键任务应用程序。

当你说很多内存是什么意思?默认情况下,BizTalk 主机实例进程内存消耗的限制设置为可用系统内存的 25%。因此,如果您的服务器有 32GB 内存,BizTalk 服务器将假定在应用任何限制条件之前达到 8GB 消耗是安全的。

您可以使用 Process Monitor (http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx) 深入挖掘 BizTalk 主机实例并查看内存消耗的位置。以我的经验,它总是会产生一些自定义代码。查看您的自定义 DLL,看看他们是否使用 XmlDocument 之类的技术来加载大文档以解析某些值。

于 2012-08-26T15:17:00.517 回答