使用Windbg找出程序CPU高问题
![ReggieDing](/i/l/?n=23&i=blog/47234/202212/47234-20221204215403873-1705467155.jpg)
背景
本人在把应用程序部署到服务器上运行,观察一段时间后运行平稳,CPU占用率为1~2%。经过一天运行后,CPU已经飙升到了40~50%。
分析
需要了解导致程序占用CPU的高的原因,一般情况下是代码中有死循环情况。
解决方案
因为程序是部署在服务端,无法安装Virtual Studio大型开发工具去调试,只能选择windbg。
1)安装Windbg在服务器上,当然有绿色版的,直接复制过去就可以跑起来。
2)配置Windbg。想要能查看到代码基本的信息,Windbg需要配置symbol。symbol就是记录了代码层面调用堆栈的数据库。这一步非常重要,否则Windbg只能查看到应用程序的偏移量地址(16进制)。symbol在windows就是编译出来的pdb文件。
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404080-1856981320.png)
2.打开windbg->按住Ctrl+S,填上路径点击OK。如下图所示。
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404075-548290926.webp)
3)挂接应用程序
在windgb上面按F6功能键,attach问题应用程序。点击“By Executable”用进程名首字母排列,有助于快速找到要挂接的程序。
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404169-472410834.png)
选择后点击OK。
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404013-647149563.webp)
4)查找问题,定位问题代码
输入"!runaway"在窗口下面,
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404012-1459285045.webp)
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215403854-1488252562.webp)
在下面命令行中输入:~2 s。注意2和s之间有空格。意思是切换到线程2。
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404036-1049067127.png)
注意如果你看不到源代码,只看到类似如下程序名+偏移量:
![](/i/l/?n=23&i=blog/47234/202212/47234-20221204215404066-2064285019.png)
那么你需要回到步骤2,重新配置Symbol。
标签:找出,Windbg,代码,程序,应用程序,线程,CPU From: https://www.cnblogs.com/ioriwellings/p/16950937.html