首页 > 编程语言 >使用Windbg找出程序CPU高问题

使用Windbg找出程序CPU高问题

时间:2022-12-04 22:00:27浏览次数:80  
标签:找出 Windbg 代码 程序 应用程序 线程 CPU

使用Windbg找出程序CPU高问题

ReggieDing 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

相关文章

  • 找出对象obj不在原型链的属性
    //返回数组的格式为key:value的形式不打印原型上的属性 varC=function(){      this.foo='bar'      this.baz='bim'    } ......
  • 同构数:找出1到n之间有多少个同构数。
    //同构数是这样一种数:它出现在它的平方数的右端。#include<bits/stdc++.h>usingnamespacestd;intf(inta){//利用函数找出a个10相乘,a就是n的位数。 ints=1; while(a......
  • CPU
    CPU的功能CPU总体框架      运算器基本结构      控制器的基本结构注意PC(程序计数器)是保存下一条指令在主存中的存放地址,CPU通过PC内......
  • Windbg提示:*** WARNING: Unable to verify checksum for 的处理
    当我们用windbg调试时,经常会遇到“***WARNING:Unabletoverifychecksumforxxx.dll”这样的提示,他的意思时不能校验某某模块的校验和。这一般都是我们的动态库或exe的......
  • 处理器从单核到多核的演化过程Linux-查看系统CPU个数、核心数、线程数
    Linux-查看系统CPU个数、核心数、线程数1.CPU个数(socket的个数)cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l2.每个CPU的核心数grep'coreid'/proc/cpuinfo......
  • Linux运维获取内存、cpu、磁盘IO信息
    一、脚本今天主要分享一个shell脚本,用来获取linux系统CPU、内存、磁盘IO等信息。#!/bin/bash#获取要监控的本地服务器IP地址IP=`ifconfig|grepinet|grep-vE'in......
  • Linux如何查看当前占用CPU或内存最多的K个进程
    内存可以使用以下命令查使用内存最多的K个进程方法1:ps-aux|sort-k4nr|head-K如果是10个进程,K=10,如果是最高的三个,K=3说明:ps-aux中(a指代a......
  • windbg preview下载及其历史版本下载
    WinDBG是专门针对WindowsNT系列操作系统而设计的调试器。WinDBG的最初版本是微软公司在开发最初WindowsNT操作系统(NT3.1)期间推出的,它是当时NT团队内部开发和调试NT操作系......
  • 查看进程在哪个CPU上运行
    ps-eopid,args,psr|grepexh#exh为进程名前缀psr(processserial)为CPU编号,如上图所示,exhaust_cpu在1号CPU运行。......
  • test cpu performance with matrix multiplication
    一需求:测试cpu计算性能二方法:1.使用一定规模方阵执行乘法运算,不需要保存结果。2.根据CPU核数开启线程执行乘法运算3.事先将线程执行任务放入线程对应的任务容器,然后开启线......