发布
社区首页 >问答首页 >.NET应用中的性能监控/度量

.NET应用中的性能监控/度量
EN

Stack Overflow用户
提问于 2012-08-04 01:25:16
回答 4查看 22.2K关注 0票数 17

我们希望收集关于我们(比如80%的WinApp)应用程序的性能数据,无论是在开发单元内部,还是在客户站点。我们的目标如下:

  • 应该是非常快的
  • 应该是轻量级的
  • 它应该允许跟踪/计时&计算我们的应用程序中的许多不同类型的事件。
  • 它应该能够有效地收集相当数量的数据,如域、ComputerName、用户、操作系统、内存等。
  • 所有收集的数据都应该是可分析的(一旦它被传输到我们的内部BI数据库)跨越上述所有维度。

理想情况下,它还可以在站点范围内或按用户进行相对可配置,以便控制:

  • 如果这些性能指标甚至被收集起来
  • 去收集它们是多么的冗长
  • 是否要向我们汇报结果

我们一直在计划编写我们自己的系统来完成大部分工作。然后,我们将查看许多不同的“持久性”模型,包括“性能数据包”的二进制格式、XmlSerialization和已经是.NET框架一部分的跟踪日志功能,仅举几个例子。

不过,在做这件事之前,我想再检查一遍,看看“人群”有什么建议。我已经描述了我们正在尝试做的事情,基本上是我们当前的行动计划--但我正在寻找any和所有关于如何最好地解决手头问题的建议。

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2014-02-05 19:48:09

请看一看Metrics.NET,这是一个相对较新的项目,应该满足大部分这些需求。这是Java‘度量’项目的一个端口。

(新增2016年3月:) Metrics.NET项目已经转移到新的人后,长期没有更新。

票数 18
EN

Stack Overflow用户

发布于 2014-02-06 04:27:11

您可以看看如何在StatsD上构建一些东西:

https://github.com/etsy/statsd/

有一个.NET包可以在这里找到:

https://github.com/robbihun/NStatsD.Client

它是轻量级的,因为它基本上只是将UDP数据包发送到远程服务器。然后,远程服务器将其聚合起来,并将其存储在Graphite中,而Graphite擅长于将这些数据转化为图形,并为您管理数据保留之类的内容。为了进行分析,Graphite还允许您以JSON的形式输出数据(这基本上将您的指标转换为一个双倍数组),并具有许多功能和过滤器,您可以将这些功能和过滤器应用于记录的度量,然后您可以将这些功能输入到其他系统中。

请参阅下面的几个例子,了解如何使用Graphite:

http://matt.aimonetti.net/posts/2013/06/26/practical-guide-to-graphite-monitoring

但是,它并不能满足您的所有要求,例如能够像计算机名称一样记录有关客户端的数据。但是,您可能可以通过在度量名称中使用名称空间来实现这个目标;因此,您可以用"client567.orders.loadtime“和" client567”这样的键记录您的度量,例如,在其他数据库中存储client567在Windows 7上使用IE11的条目。

所以这不是一个完全的开箱即用的解决方案,但我认为它是一个很好的基础。

另一种选择是使用诸如NewRelic这样的商业平台:

http://newrelic.com/

它附带了许多技术的性能监视(从ASP.NET到Server到Solr)。但是,它确实需要在后台运行代理进程(Windows上的一个服务)来为您处理监视,这可能是一个选项,也可能不是一个选项。它或多或少是针对WPF服务器的,可能不太适合监视客户端WPF应用程序。

票数 8
EN

Stack Overflow用户

发布于 2012-08-04 05:12:38

按照你的计划,我会采取这样的方法:

  1. 您将将所有性能数据写入日志文件。使用一个快速的C#日志库,如log4net或nlog。如果有必要,这些框架支持二进制附加程序。
  2. 当应用程序开始编写可用的RAM,CPU等。
  3. 使用方面注入器(如PostSharp )自动向应用程序中的每个(非内联)方法添加一个计时器。秒表班的成绩不会很好。要使这种可配置性,让方面注入器根据方法的估计优先级更改日志级别(或者使用您自己的属性来指定)。
  4. 在退出(或启动)时提示用户将记录的性能数据发送到您的the服务器。
  5. 在数据输出时将其压缩。

您还可以考虑编写自己的锁类。与其使用lock(blah)Monitor.Enter(blah),不如在您自己的一次性类中封装Monitor.Enter/Exit,该类记录您需要等待多长时间才能进入锁。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11805188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档