如何分析进程的内存占用问题
Posted 骑单车的攻城狮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何分析进程的内存占用问题相关的知识,希望对你有一定的参考价值。
一共推荐三种分析内存占用的方式
1、vmmap.exe
属于SysinternalsSuite中的工具,很强大,可以方便的查看特定进程的内存总大小(Size)、内存的提交大小(Committed)、内存专用工作集等(Private WS)等,也可以启动一个进程定时生成快照。
具体各名词介绍可以参考工具的help,或者参考如下文章:
vmmap介绍与下载地址:https://technet.microsoft.com/en-us/sysinternals/vmmap
vmmap用法介绍:http://blog.gclxry.com/use-vmmap/
名词介绍:http://shashanzhao.com/archives/832.html
SysinternalsSuite下载地址:https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx
2、vs2015
vs2015自带很强大的内存快照与分析功能(即使不是vs2015编译的项目也可以分析),调试运行项目后,只需三步即可以分析内存情况,如下图vs侧边栏:
在内存正常时先快照一次,操作被调试的进程,再快照一次,即可看到内存的增加或减少,点击“箭头3”所指的几处蓝色数值即可分别查看不同的内存堆栈信息,而且可用“dll模块视图”或“调用栈视图”查看。
如果不是vs2015编译的项目,可以通过:右键解决方案->Add->Existing Project...->选择相应exe添加并调试,注意此exe和dll要有pdb才能看到快照的调用栈内存情况,否则虽然可以快照但只有内存数值,无法定位是哪部分代码导致的内存波动。
3、windbg
windbg的强大自不必说,相关命令如下:
!eeheap,查看堆中信息,可以查看到大对象。
!dumpheap,查看堆中信息,一般带-min,-stat,-type等参数。
!gcroot,根据堆地址,查看相关模块引用代码信息。
但我也没仔细用过,具体信息可以参考这篇文章:
http://www.cnblogs.com/Lawson/archive/2011/01/23/1942692.html
以上是关于如何分析进程的内存占用问题的主要内容,如果未能解决你的问题,请参考以下文章