windows下定位程序cpu使用过高

利用windbg排查CPU占用过高问题

  • 问题描述

测试我们自己开发程序时,有时会发生CPU占用过高的问题。对于简单的程序,可能还容易排查是哪个线程占用了CPU。而对于类似流媒体,这样庞大的程序,排查难度较大。本篇案例会介绍一种排查此类问题的方法。

  • 排查方法

排查CPU过高的问题,主要的排查点,就是找到CPU被是哪些线程占用了。确定哪个线程占用CPU过高.

windbg的排查方法。

第一步,使用windbg直接attach到CPU占用过高的进程上

第二步,设置对应pdb路径,可以通过以下命令:.reload -f

第三步,使用!sunaway命令查看各个线程的占用CPU情况,如下例子:

0:002:x86> !runaway 7

 User Mode Time

  Thread       Time

   2:2460      0 days 0:00:46.597

   1:24e4      0 days 0:00:46.566

   0:2838      0 days 0:00:00.078

   4:b74       0 days 0:00:00.000

   3:a50       0 days 0:00:00.000

 Kernel Mode Time

  Thread       Time

   4:b74       0 days 0:00:00.000

   3:a50       0 days 0:00:00.000

   2:2460      0 days 0:00:00.000

   1:24e4      0 days 0:00:00.000

   0:2838      0 days 0:00:00.000

 Elapsed Time

  Thread       Time

   0:2838      0 days 3:36:05.195

   3:a50       0 days 3:35:34.947

   2:2460      0 days 3:35:34.947

   1:24e4      0 days 3:35:34.947

   4:b74       0 days 3:34:48.258

从打印可以看出,用户态的CPU,2和1号线程占用CPU非常多,我们通过命令(~线程号s)查看线程堆栈,确定线程的逻辑代码,进一步确定CPU过高的原因。

 

你可能感兴趣的:(windows下定位程序cpu使用过高)