今天看到一个博客,让我想起之前一个项目出现内存泄漏查找了几周才费劲找出问题的情景,当时只用一个简单的pmap命令,在加上各种加log打印内存,费时很久。今天看到了可以直接用gdb附近到进程将内存dump下来,这样其实就可以利用pmap输出的信息,找到那些申请的内存地址,dump下来,看看内存里面是些什么内容,可能就更容易知道是哪个地方一直用了内存后没有去处理回收。
- pmapj pid ,打印进程内存段,一般查看堆的地址
- gdb attach pid 附加到进程
- dump memory 文件路径 内存起始地址 内存结束地址
- 分析