如何度量一个工作流所消耗的处理器时间和总内存的百分比

本文关键字:处理器 百分比 时间 内存 工作流 度量 何度量 一个 | 更新日期: 2023-09-27 18:19:18

我正在尝试测量处理器时间的数量&用于执行工作流的总内存。

这是我的设置:

我有ASP。. NET应用程序调用WCF服务。

WCF服务执行几个方法,然后通过使用WorkflowApplication类的Run方法调用与之关联的工作流。

我一直在使用"进程"类别中的性能计数器来获取有关处理器时间,总内存使用百分比的数据。

正如你所想象的,因为是web服务执行工作流,所以所有的工作流都在w3wp进程下运行。

如何为每个工作流而不是过程捕获性能计数器信息?

我也很感激任何关于为什么这种方法(捕获每个工作流使用的处理器时间和内存)本身是不必要的指针/评论:)

注意:我不想在Activity中使用System写代码。

如何度量一个工作流所消耗的处理器时间和总内存的百分比

有关于执行工作流数量的perfmon计数器,但没有关于实际CPU和内存使用的计数器。工作流通常是长时间运行的,并且大部分时间都是空闲的,并且持久化到磁盘上,因此跟踪CPU/内存使用情况没有什么意义。也就是说,有时它们很忙,正在做事情,您很容易在那里发生各种类型的内存泄漏,并在一段时间后导致问题。

一般来说,我倾向于更喜欢工作流服务,在这种情况下,我可以把它们放在IIS中单独的应用程序池中,这样我就可以跟踪特定应用程序池的CPU/内存使用情况。但是,当您使用工作流应用程序时,这不是您的选择,您将不得不求助于像Red Gate ANTS性能分析器这样的分析器。非常适合开发使用,但不太适合监控生产应用程序。在这种情况下,您将需要开始为您自己的活动添加工具。

我认为最简单的方法是在单独的System.Diagnostic.Process中运行每个活动

var process = System.Diagnostics.Process.Start (
    "MyWorkflowApplication.exe", 
    "c:/My workflow service.xaml"
);
long memory = process.PagedMemorySize64;
TimeSpan processorTime = process.TotalProcessorTime;