EDIT at 2019/04/24 此博客内容过时, 内存分析请使用 gperftools, 在运行速度上比valgrind要太多了
前提:
程序使用gcc编译的, 并且编译时加入了-g
命令:
valgrind --vgdb=yes --tool=massif <程序启动命令>
如 valgrind --vgdb=yes --tool=massif ./dbserver 0 0
有两种分析方式:
1) 程序退出是分析运行过程中的内存变化
当程序退出出会生成采样文件 massif.out.<pid> 例如 massif.out.6430
使用ms_print命令把采样文件转成可阅读的文件:
ms_print massif.out.<pid> > <out_file>
如 ms_print massif.out.6430 > ms_print.out.6430
2)程序运行时, 分析当前内存占用
可以使用gdb attach到运行中的程序, 不过由于程序是运行在valgrind环境之下, gdb命令有所改变
在shell中输入:
gdb <程序>
如 gdb dbserver
待gdb加载程序完毕之后, 输入:
target remote | vgdb
这时候gdb就已经attach到程序上了, 除了使用正常的gdb命令之外, 可以使用massif的特殊命令.
一个比较有用的功能是采样当前内存使用情况并输出到文件
在gdb shell中输入
monitor detailed_snapshot
会在当前目录下产出一个massif.vgdb.out 的文件, 即为本次采样数据