【问题标题】: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 角色启动时产生的单独线程中完成。

我在自己的具体问题中提出了这个问题,但我相信这个问题适用于任何场景:如何在特定的自定义时间段内捕获性能计数器。

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: c# performance wcf performancecounter azure-cloud-services


    【解决方案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 调用来自己设置采样率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多