todo

linux/java/jvm 内存分析

up:2024-11-29 17:29:00 edit:2024-12-17 09:29:58 view:328

pmap -x $(pidof java|head -n 1) |awk '{print ($3, $0)}' |grep anon  |sort -nr |grep -v '^0' |head


直接内存追踪:

-XX:NativeMemoryTracking=[off | summary | detail]

jcmd $(pidof java)  VM.native_memory summary scale=MB >native_memory$(date -Is).txt

可用jcmd关闭 jcmd $(pidof java)  VM.native_memory shutdown(不能动态打开)

jvm主要内存占用

heap Xmx

g1 gc极端可能占用20%内存, 观察到 24g heap占用1g堆外

meta 100多

线程 每个线程1MB stack

direct buffer(internal?) 可jmx看,网络应用可能有几百MB

code(JIT)  100来MB


glibc的malloc如果最后申请的少量内存没有释放,可能影响之前free的内存归还操作系统

glibc内存分.pdf(glibc内存管理ptmalloc源代码分析)



https://www.alibabacloud.com/blog/a-detailed-explanation-of-jvm-garbage-collector-g1%26zgc_601536

https://www.cnblogs.com/z00377750/p/14470883.html

https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/nmt-8.html




#有bug? 使用 https://stackoverflow.com/questions/21483984/python-read-linux-memory-process-error-proc-pid-mem?

ps -ef |grep $1
echo pid is $1
echo continue?
read

line=$(pmap -x $1 | grep $2)
echo matched line is $line

read a b <<< $(echo $line| awk '{print $1, $2}' )
#offet size in hex
echo $a $b
pgsize=$( getconf PAGESIZE )
bcount=$(( $b * 1024  ))
echo $a $b $pgsize enter to continue
read
dd if=/proc/$1/mem bs=$pgsize iflag=skip_bytes,count_bytes skip=$(( 0x$a )) count=$bcount of="$1_mem_$a.bin"




not in sinaapp