使用Windbg找出程序CPU高问题
ReggieDing 系统架构师背景
本人在把应用程序部署到服务器上运行,观察一段时间后运行平稳,CPU占用率为1~2%。经过一天运行后,CPU已经飙升到了40~50%。
分析
需要了解导致程序占用CPU的高的原因,一般情况下是代码中有死循环情况。
解决方案
因为程序是部署在服务端,无法安装Virtual Studio大型开发工具去调试,只能选择windbg。
1)安装Windbg在服务器上,当然有绿色版的,直接复制过去就可以跑起来。
2)配置Windbg。想要能查看到代码基本的信息,Windbg需要配置symbol。symbol就是记录了代码层面调用堆栈的数据库。这一步非常重要,否则Windbg只能查看到应用程序的偏移量地址(16进制)。symbol在windows就是编译出来的pdb文件。
1.把pdb文件复制到服务器随便哪个目录下面。我把它放在exe同级目录。d:\projects\NBCS_V4\Release\StreamServer\。
2.打开windbg->按住Ctrl+S,填上路径点击OK。如下图所示。
3)挂接应用程序
在windgb上面按F6功能键,attach问题应用程序。点击“By Executable”用进程名首字母排列,有助于快速找到要挂接的程序。
选择后点击OK。
4)查找问题,定位问题代码
输入"!runaway"在窗口下面,
回车,
这个序列是按CPU从高到低排列的线程,最前面一列是线程号。
在下面命令行中输入:~2 s。注意2和s之间有空格。意思是切换到线程2。
按下Alt+6,查看堆栈状态,就可以看出该线程中,运行的是什么代码了。也就是占用CPU最大得函数。那么问题就找到了,接下可以采取一定的措施把它处理掉了。
注意如果你看不到源代码,只看到类似如下程序名+偏移量:
那么你需要回到步骤2,重新配置Symbol。
标签:找出,Windbg,代码,程序,应用程序,线程,CPU From: https://www.cnblogs.com/ioriwellings/p/16950937.html