鉴于SOA环境中相对典型的.NET 4系统(即Windows Server 2008 R2,IIS 7上的RESTful Web服务,NServiceBus消息传递的Windows服务,SQL Server 2008 R2等),最佳实践或事实上是什么解决方案(没有企业价格标签)在生产中执行24x7性能监控?
不一定消耗多少CPU /内存/磁盘IO,而是例如每分钟调用多少次createAccount(),generateResponse()方法获取的平均时间是多少,并检测例如generateResponseStarted和之间的异常delta峰值。 generateResponseComplete(方法被调用(反过来可以调用第三方)并且响应已准备好分别返回)。
经过一些谷歌搜索后,似乎可以选择低级分析器(如dotTrace)和实现性能计数器,并使用PerfMon或其他一些OpManager类型的产品。
你会推荐什么?为实时应用程序实现性能计数器会显着降低生产系统的性能吗?如果没有,是否有任何好的库可以简化.NET中的实现?如果是,除了memory-disk-cpu之外,人们如何监控其应用程序的性能?
@Ryan Hayes
谢谢,我正在寻找一种方法来查看生产系统上的异常减速或尖峰。例如,在压力测试期间一切都很好,但出于某些原因,我们依赖的第三方存在一些问题,或者由于线程锁定或者SAN正在让位或任何其他意外情况导致数据库速度变慢。低级别分析是一个过多的开销,而只有在出现问题时才开启计数器,此时为时已晚。另外,我们将丢失历史数据以与之进行比较(当delta超出可接受的阈值时,我需要某种警报系统)。我想知道人们如何监控他们的生产系统的性能以及他们的经验,这将是非内存/ CPU /服务器相关监控的最佳方法。
答案 0 :(得分:2)
您可以尝试AlertGrid。看起来这可以解决您的问题。
您可以从应用程序向AlertGrid发送各种参数(新帐户名,执行某些重要逻辑的时间等)。 AlertGrid服务可以对您的数据执行一些操作。首先,它可以处理一些使用您发送的参数构建的通知规则(例如,如果执行重要操作的时间> X秒 - >将短信发送给负责人。)
在两周内,AlertGrid将会有一系列新功能。看起来最重要的是绘制从系统接收的参数的可能性。
请注意,AlertGrid无法检测系统中的参数 - 您需要发送它们。这可能看起来像是一项额外的工作,但我们认为它与安装和配置某些专用工具所需的时间相当。另一方面,由于这种方法,AlertGrid克服了一些限制(它可以与任何可以发送http请求的东西集成)。
我相信当您在AlertGrid中创建帐户并传递其交互式教程时,将会更容易理解。
您可能已经注意到我是AlertGrid团队的开发人员:)
免责声明:在撰写本文时,我们知道AlertGrid的价格将在不久的将来降低,所以现在不要看它们,您可以联系我们的支持热线了解更多定价信息。免费帐户可用,应该足够开始。
答案 1 :(得分:0)
这里的问题是你真的想从绩效监控中学到什么?
您想让代码更快吗?然后我建议您在测试环境中使用分析工具来找出可以改进代码的位置。
您想了解系统可以处理的最大殴打吗?然后我建议在测试环境中执行负载测试。如果您确切地知道在不破坏系统的情况下推动系统的难度,那么您就不需要将监控投入生产。
对于制作,您可能希望最大限度地提高性能。要做到这一点,通常很难推动测试环境并获得可靠的指标,这样您就不需要在生产中安装性能监视器。对于生产,你只是想知道你什么时候达到那个高峰,然后优雅地降级或者你认为合适的任何东西。通常,良好的日志记录是监控系统(除硬件之外)性能并记录特殊性能怪癖的最佳方式。
虽然每个系统都不同,但您的里程可能会有所不同。把它作为一个建议,而不是每个人都这样做的方式,因为总有一些例外情况,你可能不得不在生产中运行分析。
答案 2 :(得分:0)
我们使用Nagios进行本地监控(CPU,磁盘空间等)和AlertFox进行Web事务监控(“外部视图”)。当然,如果您的网站(?)是公开的,那么后者才有意义。
为实时应用程序实现性能计数器会显着降低生产系统的性能吗?
我们已经安装了Nagios Win服务器插件,并且看不到它们的性能问题。