首页 > 代码库 > 如何分析进程的内存占用问题

如何分析进程的内存占用问题

一共推荐三种分析内存占用的方式

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

如何分析进程的内存占用问题