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

7
在一个SOA环境中(即Windows Server 2008 R2,IIS 7上的RESTful Web服务,用于NServiceBus消息传递的Windows服务,SQL Server 2008 R2等),针对一个相对典型的.NET 4系统,有哪些最佳实践或事实解决方案(没有企业价格标签)用于在生产中进行24x7性能监控?这不一定是它消耗了多少CPU /内存/磁盘IO,而是例如每分钟有多少createAccount()调用,generateResponse()方法平均需要多长时间,并检测例如generateResponseStarted和generateResponseComplete之间的异常增量峰值(分别调用方法(反过来可能会调用第三方)并准备返回响应)。经过一些搜索,似乎可以选择低级分析器(如dotTrace)并实现性能计数器,使用PerfMon或其他OpManager类型产品来消耗这些计数器。你会推荐什么?在生产系统上实施性能计数器会显著降低性能吗?如果没有,是否有任何良好的库可以简化.NET的实现?如果有,人们除了内存-磁盘-CPU之外如何监视其应用程序的性能?

性能计数器非常快速 - 并且专门为此类事情而构建。即使是像 Windows 上的网络这样的“关键”路径也使用它们。 - nos
2个回答

2
你可以尝试使用AlertGrid。看起来这可能是解决你问题的方案。
你可以从你的应用程序向AlertGrid发送各种参数(比如新账户名称、执行某个重要逻辑的时间等)。AlertGrid服务可以对你的数据进行一些处理。首先,它可以使用你发送的参数构建一些通知规则(例如,如果执行某个重要任务的时间大于X秒,则向负责人发送短信)。
在两周内,AlertGrid将拥有许多新功能。最重要的功能似乎是可以绘制从你的系统接收到的参数。
请注意,AlertGrid无法检测你的系统参数-你需要自己发送它们。这可能需要额外的工作量,但我们认为它与安装和配置一些专业工具所需的时间相当。另一方面,由于这种方法,AlertGrid克服了一些限制(它可以与任何可以发送http请求的东西集成)。
我相信当你在AlertGrid创建帐户并通过交互式教程时,你会更容易理解。
正如你可能已经注意到的,我是AlertGrid团队的开发人员:)
免责声明:撰写时我们知道 AlertGrid 的价格将在不久的将来降低,因此现在不要考虑价格,您可以联系我们的支持热线获取更多定价信息。免费账户可用,并且应该足够初步使用。

0

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

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

  • 你想知道系统最大的负载能力吗?那么我建议在测试环境中进行负载测试。如果你知道如何在不破坏系统的情况下推动它的极限,那么你就不需要在生产环境中使用监控。

对于生产环境,你可能希望最大化性能。为了做到这一点,通常会在测试环境中大力推动,并获得可靠的指标,以便你不需要在生产环境中放置性能监视器。对于生产环境,你只需要知道何时达到峰值,然后优雅地退化或采取其他适当的措施。一般来说,良好的日志记录是监控系统(除硬件外)性能和记录异常性能问题的最佳方法。

每个系统都是不同的,你的结果可能会有所不同。把这看作是一个建议而不是每个人都这样做的方式,因为总会有特殊情况,你可能需要在生产环境中运行分析。


谢谢,我正在寻找一种方法来查看生产系统中的异常减速或峰值。例如,在压力测试期间一切正常,但由于线程锁定,第三方依赖出现了一些问题或DB正在减速,SAN正在放弃或任何其他意外情况。低级别分析是太多的开销,而在出现问题时仅打开计数器已经太晚了。此外,我们将错过历史数据以进行比较(我需要某种警报系统,以在增量超出可接受阈值时发出警报)。我想知道[…] - Ilya Kozhevnikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接