所以我的服务器最近变得有点疯狂,我的IIS线程会不时耗尽我的CPU并挂起,直到我重新启动它。
我已经完成了转储并找到了罪魁祸首的ASPX页面,但是,我不知道如何从那里进一步了解发生了什么。
显然我做了一些非常错误的事情 - 所以当IIS开始吃掉我的CPU时,是否有可能看到代码中的哪些线程正在运行?
谢谢, 罗恩
答案 0 :(得分:1)
为了查看线程正在执行的代码,您将需要与正在运行的代码匹配的符号(.pdb文件)。您还需要为.NET Framework / Windows dll设置符号。此KB介绍了如何执行此操作:http://support.microsoft.com/kb/311503
WinDbg工具和SOS.dll调试扩展允许您查找具有最高CPU !runaway
的线程,然后您可以检查堆栈!clrstack
。 Tess有一个很棒的演示,演示了如何使用它来跟踪高CPU线程:http://blogs.msdn.com/b/tess/archive/2008/02/22/net-debugging-demos-lab-4-high-cpu-hang.aspx
答案 1 :(得分:0)
这通常是在你进行闭环时 - 比如。
function int ThisOne(int SomeVar)
{
return SomeVar+1;
}
function int ThisOne(int ? SomeVar)
{
// here you try to call the ThisOne(int SomeVar),
// but you call him self and crash
return SomeVar == null ? 0 : ThisOne(SomeVar);
}
制作此错误的其他方法也会导致关闭循环并崩溃
public string sMyText
{
get {return sMyText;}
set {sMyText = value;}
}
类似的问题: How do I crash the App Pool?
答案 2 :(得分:0)
最近,我遇到了同样的情况:我想测量我的实时制作服务器上发生了什么。
在Red Gate的ANTS Profiler论坛上也提出了问题,我得到了一个great reply from the developers:
基本上,我指出了ANTS Profiler第7版的早期访问程序(EAP)版本。这个功能称为“连续分析”,它基本上是对IIS工作进程的实时跟踪。