我发现我的应用池的w3wp进程的CPU使用率太高了。 使用调试诊断工具搜索并找到与转储和分析相关的文章。
但是分析只显示了高CPU占用率的前1个线程中的调用堆栈":
System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr的, System.Web.RequestNotificationStatus ByRef) System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr的, System.Web.RequestNotificationStatus ByRef)
一旦我重新启动应用程序池,CPU使用率就会恢复正常。在网站上测试了不同的东西几个小时之后,我发现CPU使用率已回到50%。我不确定哪种情况会导致此行为。
该应用是在Windows Server 2008 R2,IIS 7上运行的.NET 4 Razor网站 什么是我能做的最好的事情来确定这里的问题。 很少有人会赞赏。
答案 0 :(得分:2)
我最终使用Process Explorer获得了一些有意义的信息。
当它停留在50%时,我们去了w3wp的属性,看着"线程"选项卡,发现一个线程消耗了接近45%的CPU并查看了它的堆栈信息。它就是我的代码中的加密字符串算法! :)
使用dotTrace试用版验证了这一点,该版本提供了相同的信息,尽管它更易于阅读。
我将更改加密算法并监控CPU峰值2天,以确保。