cat /sys/fs/cgroup/memory/memory.stat
一、查看内存分部 pmap -x 8 | sort -k3 -n -r | more ---- 8 是 PID
最大的肯定是堆内存。
其他的就需要看情况来分析了。
二、cat /proc/8/smaps | grep 7fad64000000 -- 8 是 PID , 地址的前4个0需要去掉。查到起止内存地址。
7fad64000000-7fad68000000 rw-p 00000000 00:00 0
Size: 65536 kB
Rss: 65536 kB
Pss: 65536 kB
三、gdb -p 8 --8 是 PID , 进入gdb命令内
dump memory /tmp/showMem.bin 0x07fad64000000 0x7fad68000000
前面之前是0000,16进制就是一个0
四、strings /tmp/showMem.bin /tmp/showMem.log ,查看showMem,看具体的代码内容
修正版:
堆外分析
1. jcmd 9 VM.native_memory detail scale=MB > native_mem_1210.log
2. pmap -x 9 | sort -k3 -n -r > pmap_1210.log
3. 选取2步骤中的比较大的地址,然后查到开始和结束地址,pmap的地址是开始地址
cat /proc/9/smaps | grep 7fc238000000
7fc238000000-7fc23c000000
4. 根据起始地址查看内存中的信息
dd if=/proc/9/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes skip=$(( 0x7fc238000000 )) count=$(( 0x7fc23c000000 - 0x7fc238000000 )) of="9_dump_7fc238000000.bin"
5.strings /tmp/showMem.bin /tmp/showMem.log