自定义时间段内的性能计数器
Posted
技术标签:
【中文标题】自定义时间段内的性能计数器【英文标题】:Performance counters over custom period of time 【发布时间】:2015-08-18 10:46:48 【问题描述】:我需要能够在特定的自定义时间段内收集一些性能计数器。我对来自 ServiceModelService 的几个性能计数器特别感兴趣:“Calls”和“Failed Calls”,尽管这个问题适用于我相信的任何人。
开箱即用,WCF 提供“Calls”以及自服务启动以来的总数和“Calls per second”; “失败的呼叫”,“每秒失败的呼叫”相同。我需要的是能够在自定义时间段内创建它,例如“每分钟通话次数”或“每小时通话次数”。
我还没有看到任何开箱即用的方法。我想我可以创建自己的性能计数器收集器,它将每隔 X 时间进行一次计算;我的应用程序在 Azure 云服务中运行,因此我相信这可以在启动任务中安装的单独 exe 中完成,或者在 Web 角色启动时产生的单独线程中完成。
我在自己的具体问题中提出了这个问题,但我相信这个问题适用于任何场景:如何在特定的自定义时间段内捕获性能计数器。
任何帮助将不胜感激!谢谢!
【问题讨论】:
【参考方案1】:所以事实证明,“每秒调用次数”和“每秒失败调用次数”性能计数器的名称有点误导......它们的默认采样率为 1 秒,但它们能够适用于您的任何采样间隔率需要。例如,如果您想知道五秒钟内发生的调用次数,您可以编写如下代码:
// load performance counter
var numOfCalls = new PerformanceCounter(...);
// read initial value for the period
numOfCalls.NextValue();
// wait desired period
Thread.Sleep(5000);
// read final value, the counter will internally calculate it based on the two samples
numOfCalls.NextValue();
如果您使用 perfmon,您可以更改采样率;如果您使用的是代码,那么您可以通过间隔 NextValue 调用来自己设置采样率。
【讨论】:
以上是关于自定义时间段内的性能计数器的主要内容,如果未能解决你的问题,请参考以下文章