记一次使用Windbg分析内存“泄漏”的案例

客户的生产环境里发生怪异的事情,他们发现IBM Spectrum Symphony的集群里的核心进程VEMKD的内存使用时不时会一路飙升且不下降,如果不人工干预(重启VEMKD)的话,VEMKD的内存使用可能会撑爆(64G的物理内存)。且看下图。

因为是生产环境,UMDH这个工具是不能上的,会影响cluster,而这个问题又仅仅在生产环境观察到,在QA和UAT环境都没有,DEV环境更没有。所以我们在分析各种VEMKD的log和perf log之后,不能确定怀疑的点在哪,只好让客户配合收集VEMKD的core dump文件,一并把环境里的vemkd.pdb和vemkd.exe上传给我们,试图从dump文件里分析泄漏点在哪。收集dump,可以从task manager找到进程,右键生成dump;也可以用Process Explorer右键生成dump。

WinDbg分析dump,总结下来,在这个case里下面几个命令比较相关和实用。

!heap -s==>  显示堆的概要信息(-s即summary)。一般从概要信息里可以看到哪些heap是占用较多内存的。优先考虑最大的heap,然后用下一个命令查看该heap的更多信息。

!heap -stat -h Handle==> 显示指定堆地址Handle的内存使用统计信息

!heap -flt s size==> flt即filter, 仅显示所有内存分配大小为指定size的分配详情

!heap -p -a address ==>-p显示要看page heap info, -a指定要看的info要包括address这个地址。特别注意,-a可以显示调用栈(Stack traces),当然事先收集core dump的时候需要先用gflag打开

!heap -x -v address ==>-x查找包含有指定address的堆,-v则针对指定的address额外查找当前进程整块的虚拟内存空间

!heap -i heapaddress   && !heap -i memory’s heapentry  ==>-i指显示指定heap的信息

dt -v [module!]Name Address ==> display type,显示指定变量Name的类型,后面跟Name的内存地址
dc address Llen ==> dc,显示double word类型
db address   ==>display byte,显示byte和ASCII码

!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞鸿踏雪Ben归来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值