高CPU调试(一)

本文通过分析三个不同时间点的dump文件,详细记录了使用Windbg排查.NET应用程序中线程0持续高CPU占用的原因,并逐步定位到具体代码位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        static void Main(string[] args)
        {
            Console.Clear();
            Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps");
            Console.WriteLine("如果要停止,按Ctrl+C结束程序");
            Console.WriteLine("====================================================");
            
            while (true)
            {
                Console.SetCursorPosition(0, 3);
                Console.Write(DateTime.Now.Ticks.ToString());
            }

            Console.ReadKey();
        }

dmp:

第一个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
 User Mode Time
  Thread       Time
   0:334       0 days 0:00:00.468
   3:dc8       0 days 0:00:00.000
   2:14d0      0 days 0:00:00.000
   1:750       0 days 0:00:00.000

第二个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
 User Mode Time
  Thread       Time
   0:334       0 days 0:00:08.221
   3:dc8       0 days 0:00:00.000
   2:14d0      0 days 0:00:00.000
   1:750       0 days 0:00:00.000

第三个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
 User Mode Time
  Thread       Time
   0:334       0 days 0:00:11.559
   3:dc8       0 days 0:00:00.000
   2:14d0      0 days 0:00:00.000
   1:750       0 days 0:00:00.000
从上面的输出可以看到,线程0的CPU时间不断增加,CPU高占用很可能是由于线程0正在执行的代码有问题造成的。

  可以用!clrstack命令查看一下当前的调用堆栈以及其上的局部变量和值。

  当执行!clrstack时,报出了如下提示:

0:000> !clrstack
Failed to find runtime DLL (mscorwks.dll), 0x80004005
Extension commands need mscorwks.dll in order to have something to do.

这不是我想要的,加载mscorwks失败。后来经过调试发现,原来是第一步就.load时就错了,因为我的那段代码用的是vs2010。所以应该加载.net frameword 4.0。

  所以,最初应该执行的.load C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/sos.dll

  然后在执行!clrstack

  第三个Dump

0:000> !clrstack
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for clr.dll - 
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP       IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8] 
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc] 
第二个Dump
0:000> !clrstack
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for clr.dll - 
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP       IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8] 
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc] 
第一个Dump:

0:000> !clrstack
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for clr.dll - 
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP       IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8] 
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc] 
出问题的代码已可以看得到,就在Main方法里。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值