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

Posted

技术标签:

【中文标题】服务器开发中的性能计数器【英文标题】:Performance Counters in Server Development 【发布时间】:2010-04-01 05:35:33 【问题描述】:

你们所有人都同意将性能计数器用于服务器应用程序的价值。

我想知道如何使用 C# 来实现这些。

通常性能计数器具有以下属性:

    它们是共享的/全局的 写入需要锁以确保同步 阅读有时也需要锁

异步更新它们更好吗?使它们异步的最佳方法是什么?

我打算使用 ThreadPool.QueueUserWorkItem() 函数。您对此有何看法?

如果我的问题看起来有点模糊,请查看 HelloWorld WCF 服务。

我还想知道以下内容:

    在一定时期内整体被击中的次数 总体和特定时期内的平均/最小/最大响应时间

如果有人知道在 .NET 或 WCF 中执行此操作的任何专门方法,请告诉我。

【问题讨论】:

我已经看过一些特殊课程来完成这项任务,但我不知道任何人都可以帮助我分享一些关于这些的文章。 【参考方案1】:

如果您为此目的使用.NET classes,则无需手动锁定性能计数器的递增、递减和查询 - 框架会为您完成。

如果您需要在本机代码中使用性能计数器,您仍然应该使用 InterlockedIncrement() 和朋友。

我认为异步更新性能计数器不是一个好主意,但你的里程可能会有所不同。如果有关某些有趣情况的数据是在事后到达的,则它可能被认为没那么有用。在所有情况下,我不会仅仅为了更新性能计数器而对 ThreadPool 施加压力。现在,如果您无论如何都需要在线程中执行触发计数器的工作,那当然会有所不同。

一般来说,我认为性能计数器的更新并不是真正的瓶颈,而是用于更新计数器的数据的收集。

例如,.NET GC 内存性能计数器仅在 GC 实际发生时更新,因为跟踪信息(在后台)只是为了在每次发生某些事情时更新计数器成本太高(对不起,这里没有参考,但是有一些关于该特定主题的 MS 博客条目)。

最后,请注意WCF already provides 相当多的开箱即用计数器,这可能已经涵盖了您现在想要的所有内容。

【讨论】:

【参考方案2】:

您可以使用标准的 Windows 性能计数器。

可以使用 system.diagnostics.performancecounter 命名空间从 c# 访问此功能。有关 C# 示例,请参阅:

http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx

【讨论】:

以上是关于服务器开发中的性能计数器的主要内容,如果未能解决你的问题,请参考以下文章

Chrome开发工具服务工作者错误图标/计数

运行负载测试时无法从某些服务器获取性能计数器

无法让 nservicebus 性能计数器在 Windows Server 2008 R2 上的开发/自主机中工作

iOS6 中的自动增量推送通知徽章

如何使用性能计数器监控 WCF 服务正常运行时间?

性能测试-敏捷开发中的一等公民