我们在生产中有一个asp.net应用程序,其中w3wp.exe占用100%CPU(4个核心 - 4个线程,25%),并且cpu加载永远不会下降,直到我们回收应用程序池(应用程序单独在应用程序池)。我们的错误日志没有任何内容,没有发出异常(或者至少我们没有捕获它们)所以我们怀疑它是代码问题(无限循环/死锁)。这个问题只会在高负荷运行几个小时后出现(数千名用户)。
有什么方法可以分析导致cpu加载的一个EXISTING线程?在看了JetBrains的DotTrace Profiler之后,看起来不太可能出现Profiling API和man的限制,我们无法在我们的测试环境中重现这个问题。 该应用程序使用SQL Server 2005,LINQ2SQL和System.Transactions API。
有任何建议可以找到问题吗?
答案 0 :(得分:2)
创建当前正在运行的应用程序的内存转储,然后下载WinDbg and SoS (Son of Strike),查看正在运行的应用程序的内存配置文件,以查看占用性能问题的内存最多的内存。如果您有.NET 4应用程序,则可以在Visual Studio 2010中加载内存转储,并更加直观地了解正在消耗内存的内容。您将能够看到当前正在运行的流程能够根据CPU使用情况来衡量这些流程。
dnr tv episode - Tess Ferrandez on Debugging in .NET是关于如何使用WinDbg调试ASP.NET应用程序的一个很好的介绍。