生产中.NET应用程序的持续性能监控?

Ily*_*kov 7 .net performance monitoring production continuous

鉴于SOA环境中相对典型的.NET 4系统(即Windows Server 2008 R2,IIS 7上的RESTful Web服务,NServiceBus消息传递的Windows服务,SQL Server 2008 R2等),最佳实践或事实上的解决方案是什么(没有企业价格标签)用于在生产中执行24x7性能监控?

它不一定消耗多少CPU /内存/磁盘IO,而是例如每分钟创建多少createAccount()调用,generateResponse()方法获取和检测异常增量峰值的平均时间是多少,例如generateResponseStarted和generateResponseComplete(方法)被调用(反过来可以调用第三方)并且响应准备好分别返回).

经过一些谷歌搜索后,似乎选择适用于低级分析器(如dotTrace)和实现性能计数器,并使用PerfMon或其他一些OpManager类型的产品.

你会推荐什么?为实时应用程序实现性能计数器会显着降低生产系统的性能吗?如果没有,是否有任何好的库可以简化.NET中的实现?如果是,除了memory-disk-cpu之外,人们如何监控应用程序的性能?


@Ryan Hayes

谢谢,我正在寻找一种方法来查看生产系统上的异常减速或峰值.例如,在压力测试期间一切都很好,但出于某些原因,我们依赖的第三方存在一些问题,或者由于线程锁定或者SAN正在让位或任何其他意外情况导致数据库速度变慢.低级别的分析是一个过多的开销,而只有在出现问题时才开启计数器,此时为时已晚.另外,我们将丢失历史数据以与之进行比较(当delta超出可接受的阈值时,我需要某种警报系统).我想知道人们如何监控他们的生产系统的性能以及他们的经验,这是非内存/ CPU /服务器相关监控的最佳方法.

Rya*_*yes 0

这里的问题实际上是您想从性能监控中学到什么?

  • 您想让您的代码更快吗?然后我建议在测试环境中使用分析工具来找出可以改进代码的地方。

  • 您想了解您的系统可以处理的最大跳动吗?然后我建议在测试环境上进行负载测试。如果您确切地知道在不破坏系统的情况下可以多大程度地推动系统,那么您就不需要将监控投入生产。

对于生产,您可能希望最大限度地提高性能。为此,通常会大力推动测试环境并获得可靠的指标,这样您就不需要在生产中放置性能监视器。对于生产,您只想知道何时达到峰值,然后优雅地降级或以任何您认为合适的方式降级。一般来说,良好的日志记录是监视系统(除硬件之外)性能并记录异常性能异常的最佳方法。

但每个系统都不同,您的里程可能会有所不同。将此作为建议,而不是每个人都这样做的方式,因为总有例外情况,您可能必须在生产中运行分析。