我正试图描述一个内存耗费大量的biztalk编排。这个编排正在使用大量的地图和一些自定义脚本functoid 我希望确定业务流程创建的自定义对象的生命周期以及它们如何在Garbagage集合中进行提升。我无法使用CLR分析器。
寻找指向以识别垃圾收集中升级的对象的指针。
答案 0 :(得分:1)
嘿Pari,这里有几件事要尝试。首先,我亲自在BizTalk流程上使用过Ants Profiler,这里有一个链接: http://www.red-gate.com/supportcenter/Content.aspx?p=ANTS%20Profiler&c=knowledgebase%5CANTS%5FProfiler%5CKB200801000222.htm
其次,您也可以使用Windows Perfmon进行一些处理,但它不会像对象级别一样精细,但它会告诉您是否遇到了促销,大堆等问题。
您应该能够在Windows中使用Perfmon获取此信息。您可能会遇到的基本内容位于 .NET CLR内存对象中。不幸的是,您必须为所有BizTalk进程添加它们,因为命名约定不允许您在此处查看主机名。您将在此处和日志中看到它们,如BTSNTSvc,BTSNTSvc#1,BTSNTSvc#2等。需要一些额外的工作来确定哪个是您感兴趣的过程。
允许您识别正确进程的计数器是进程\ ID进程计数器,同样适用于每个BizTalk进程。这将允许您将PID从启动时的进程连接到稍后的Perfmon日志中的PID。
最后一步是创建一个新主机(如果尚未创建),并将业务流程隔离开来。这样,它就是BizTalk流程中唯一运行的东西。之后,您可以打开Windows任务管理器并查看正在运行的所有BTSNTSvc.exe进程。从关闭新进程开始,检查“任务管理器”中列出的PID,然后打开新主机。新PID是分配给刚刚打开的主机的PID。记录生成新进程的PID,并使用它来识别您感兴趣的Permon日志中的哪个进程。不幸的是,每次要进行测量时都必须重复此步骤。
最后要提到的是,当你打开Perfmon登录时,它只记录当时打开的主机。因此,您需要在使用业务流程打开主机后将其打开。
您可能还想查看Biztalk中的对象:MessageAgent,因为BizTalk中有一些很好的内存计数器,其中包含与它们相关的实际名称。它并不像你想要的那样精细。
我也听说过一个编排探查器,但我从未使用它。你可以试一试: http://www.codeplex.com/BiztalkOrcProfiler