ASP.NET 生产应用程序中的 w3wp.exe 使用 100% CPU。如何发现问题?
我们有一个正在生产中的 asp.net 应用程序,其中 w3wp.exe 占用 100% CPU(4 个核心 - 4 个线程占 25%),并且 CPU 负载永远不会下降,直到我们回收应用程序池(该应用程序单独存在于应用程序池中) 。我们的错误日志没有任何内容,没有发出任何异常(或者至少我们没有捕获它们),因此我们怀疑这是代码问题(无限循环/死锁)。该问题仅在高负载(数千用户)运行几个小时后才会出现。
有什么方法可以分析导致 cpu 负载的现有线程之一?在查看了 JetBrains 的 DotTrace Profiler 后,由于 Profiling API 和 man 的限制,似乎不可能在我们的测试环境中重现该问题。 该应用程序使用 SQL Server 2005、LINQ2SQL 和 System.Transactions API。
有什么建议可以找到问题吗?
we have an asp.net app in production where w3wp.exe is taking 100% CPU ( 4 cores - 4 threads at 25% ) and cpu load never goes down until we recycle the application pool ( the app is alone in the application pool ). Our error log has nothing, there is no exceptions being emitted ( or at least we don't catch them ) so we suspect it's code problem ( infinite loop / deadlock ). The problem only arises after some hours running with high load ( several thousand users ).
There is any way to profile one of the EXISTING threads that is causing cpu load ? After taking a look to JetBrains's DotTrace Profiler seems like it's not possible for limitations of Profiling API and man, we haven't get to reproduce the problem in our testing environment.
The app uses SQL Server 2005, LINQ2SQL and System.Transactions API.
Any suggestion to find the problem ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
创建当前正在运行的应用程序的内存转储,然后下载 WinDbg 和 SoS (Son of Strike) 看一下查看正在运行的应用程序的内存配置文件,了解什么消耗了最多的内存以及性能问题所在。如果您有 .NET 4 应用程序,则可以在 Visual Studio 2010 中加载内存转储,并更直观地了解消耗内存的内容。您将能够看到当前正在运行哪些进程,并能够根据 CPU 使用情况来衡量这些进程。
dnr 电视节目 - Tess Ferrandez 谈 .NET 调试 是一个很好的介绍关于如何使用 WinDbg 调试 ASP.NET 应用程序。
Create a memory dump of the currently running application and then download WinDbg and SoS (Son of Strike) take a look at the memory profile of the running application to see what is consuming the most memory, where the performance issues are. If you have a .NET 4 application, you can load the memory dump in Visual Studio 2010 and get more of a visual look at what is consuming memory. You'll be able to see wha processes are currently running an be able to gauge these against CPU usage.
The dnr tv episode - Tess Ferrandez on Debugging in .NET is a good introduction on how to use WinDbg for debugging an ASP.NET application.