性能计数器是实现和平均每秒计数的最佳方法吗?

Posted

技术标签:

【中文标题】性能计数器是实现和平均每秒计数的最佳方法吗?【英文标题】:Are performance counters the best way to implement and average per second count? 【发布时间】:2011-01-31 12:22:18 【问题描述】:

我想在我的应用程序中加入某种性能指标。 Windows 性能计数器 (Perfmon) 计数器是最好的方法吗?我只是担心对于我想要的东西来说这可能是太多的开销,这只是一个简单的平均每秒计数。自己滚动会更好吗?

【问题讨论】:

【参考方案1】:

是的,Perfmon 运行良好。 为了最大限度地减少任何开销,请在远程计算机上运行 Perfmon。 我使用 Perfmon 从同一网络上的开发机器上收集了 BizTalk 服务器上严肃、深入和有价值的性能数据,并且该过程的每个部分都运行良好。如果没有非常有力的证据,我什至不会考虑使用任何其他方法来收集同类性能数据。

【讨论】:

【参考方案2】:

不,性能计数器很草率,不应该用于“关键”计数器。 在高利用率系统上,性能计数器的更新速度可能非常缓慢,甚至可能不正确。

【讨论】:

[需要引用]。性能计数器用于测量系统关键事件,例如页面错误/秒、处理器中断/秒等。 有很多资源可以帮助您使用 .Net 创建自己的性能计数器。如果这种做法如此糟糕,不会有更多的警告。特别是在 MSDN 上?查看 PerfMon 中可用的所有计数器,Microsoft 已将它们用于各种用途。如果这很糟糕,那么我可以使用替代方案吗?我想滚动你自己的计数器等可能会很麻烦。 尽管过度使用 perf ctrs 确实会对整体性能产生负面影响,但它们对于严肃的仪器来说绝对是至关重要的。每个主要的 Microsoft 服务器产品都广泛使用它们; SQL Server 团队绝不会允许马虎的性能降低他们对 Oracle 等人的分数。我拒绝你的说法,因为我不知情。我不同意您提供一种具有相同互操作性和远程管理潜力的更好方法。 @AlanMcBee 自己构建一个,它具有相同的互操作性和远程管理潜力,虽然它可能不可行 :) 但是性能计数器可能会对系统性能产生负面影响,并且可能无法提供每秒平均值在一秒钟内清楚地了解正在发生的事情。如果您需要真正细粒度的分析信息,在您自己的应用程序中运行一个简单的计数器并不难实现。 当您需要亚秒级性能调优时,PerfCtrs 不应替代代码分析;我同意这一点。但最初的问题是关于 PerfCtrs 的一般功效。您的回答建议一般避免使用它们,这是一个不好的建议。在需要仪器的大多数情况下,建议使用它们。一个简单的 NumberOfItems32 计数器的更新时间仅比 Interlocked.Increment(Intel Core i3 2 核 2.27GHz)长 14ns,或 1,000,000 次更新的时间长 7 毫秒。定制计数器通常是 NIH 反模式的示例。

以上是关于性能计数器是实现和平均每秒计数的最佳方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

性能计数器 - 每分钟速率类型? [复制]

服务器开发中的性能计数器

使用 spark 和 scala 进行连接计数时获得性能的最佳方法

传入和传出字节的 SQL Server 性能计数器

使用硬件性能计数器是个好主意吗

C# WMI、性能计数器和 SNMP 哦,天哪!