我们的某个应用程序存在一些性能问题。我想过使用像dotTrace这样的东西来找出问题所在,但dotTrace可能会降低性能。
在prod环境中分析应用程序的最佳方法是什么,不会对性能产生太大影响?
答案 0 :(得分:3)
一般的答案是“不要这样做”。
除此之外,您可以通过使用性能计数器获得很多收益。如果内置计数器没有帮助,您可以创建自己的。
除其他外,性能计数器可以让您了解如何通过负载测试重现性能问题。
下一个想法是缩小您感兴趣的区域。如果结果是您的Web服务访问速度很慢,那么对整个应用程序的性能没有任何影响。
接下来,请确保已经为您的应用程序进行了检测,最好是使用配置。企业库日志记录应用程序块非常适用于此,因为它允许您将日志记录添加到应用程序,但将其配置为关闭。然后,您可以配置要记录的信息类型以及将其记录到何处。
这使您可以选择日志记录的成本,从记录到事件日志到记录到XML文件。你可以在运行时决定这一切。
最后,您将无法使用dotTrace或其他需要重新启动IIS以及向正在运行的应用程序添加代码的内容。不在生产中。上述想法是为了不需要这样做。
答案 1 :(得分:1)
分析内存或cpu ?
内存:最好的方法是创建w3wp进程的内存转储(启动任务管理器,右键单击该进程然后“创建转储”),然后将转储复制到本地计算机并使用WinDbg进行分析。看看哪些类占用的内存最多。 Stackoverflow上有很多问题/答案,关于如何做到这一点(如何使用WinDbg并分析.NET堆)。
CPU:我们使用Sam Saffron的简短命令行分析器(哇哇,Stackoverflow的创建者之一!)他的项目已被放弃,但我们将它分叉并在此处维护。 https://github.com/jitbit/cpu-analyzer欢迎每个人做出贡献。它使用Microsoft的DbgManager
附加到您的线程,并找到执行时间最长的调用堆栈。
答案 2 :(得分:0)
您可以使用蚂蚁探查器
http://www.red-gate.com/products/ants_performance_profiler/index2.htm
他们声称“开销难以察觉”。
有14天免费试用,所以你可以尝试一下。
编辑:我同意John的评论,它会中断,需要一些停机时间才能启动/停止。最好在测试环境中使用它来识别瓶颈。
答案 3 :(得分:0)
您是否在生产环境实际负载附近的多个会话上对应用程序进行了负载测试?
首先想到的是你的应用程序在负载下不能很好地扩展,或者你的数据库在扩展时不能很好地扩展(导致这种方式出现问题,即使并发会话的数量非常有限)但是可能是真的。
我的建议是复制生产环境并运行适当的负载测试,然后查看数据,它会给你一些线索。
你不想在生产环境中玩游戏,但是如果你还没有它,你可以使用日志来跟踪关键事件的顺序和时间跨度,并从那里开始。
答案 4 :(得分:0)
您可以使用蚂蚁配置文件以及系统的性能计数器。它将帮助您确定问题是什么。
以下是有关表现计数器的一些细节。
http://msdn.microsoft.com/en-us/library/fxk122b4.aspx
答案 5 :(得分:0)
我建议在Production中对该进程进行多次内存转储,查看所有堆栈跟踪,看看是否找到了一个模式。