内容目录
背景
一个用户反馈PC 客户端很卡,开始想可能用户内存不足导致,因为太多用户使用古老的机器,于是我远程排查一下
过程
- 查看系统配置
- 内存12G,CPU4核,配置也算ok
- 通过用户软件挂越久越明显,卡的时候查看内存,软件自身的内存不高。
- 退出软件问题就会没有
- 软件卡的时候点击界面无响应
看到这里就无从下手,因为挂几天才能出现,只能等用户下次反馈了,于是赶紧百度+google看一下一般这种情况怎么处理。
网上解决办法
通过procdump 生成dump文件,然后通过windbg 分析。
这个我们也可以手动生成dump,在任务管理器中通过对卡进程右键生成dump文件。
排查思路
其实这个思路很简单,我们只要在卡的时候生成dump文件,然后看主线程调用堆栈,因为卡住肯定是主线程调用某个函数导致卡住,所以一定义卡住时候生成dump,这里建议procdump因为可以设置命令,设置进程cpu 大于多少,然后卡了几秒来自动生成,这样子方便偶尔出现的卡,对于反复卡断,手动也可以(手动生成dump比较大)。
我的解决办法
- 打开vs 工程并对应版本的源代码
- 直接拖动dump到vs代码
- 点击运行诊断分析
- 自动跳到对应代码地方,这里就可以开始你自己分析,为什么会调用这个函数卡住
- 死循环
- 里面有阻塞IO
- 死锁
- 通过堆栈看一下对象,得到很多信息分析
总结
这个方法比windbg方便一些,对于我们这种用windbg不多人,方便很多。我只要知道哪个函数有问题。