今天看到一個博客,讓我想起之前一個項目出現內存泄漏查找了幾周才費勁找出問題的情景,當時只用一個簡單的pmap命令,在加上各種加log打印內存,費時很久。今天看到了可以直接用gdb附近到進程將內存dump下來,這樣其實就可以利用pmap輸出的信息,找到那些申請的內存地址,dump下來,看看內存裏面是些什麼內容,可能就更容易知道是哪個地方一直用了內存後沒有去處理回收。
- pmapj pid ,打印進程內存段,一般查看堆的地址
- gdb attach pid 附加到進程
- dump memory 文件路徑 內存起始地址 內存結束地址
- 分析