// https://www.jianshu.com/p/1e6...
// https://blog.csdn.net/weixin_...

-XX:NativeMemoryTracking=summary

jcmd pid VM.native_memory

类的追踪:
增加jvm参数: -verbose:class

堆内存追踪:
1:dump进去文件,应用jvisualvm.exe或者其余工具查看文件。jvm命令:jmap -dump:format=b,file=outfile {pid}
2:jmap -histo:live {pid} (会触发fullgc)/ jmap -histo {pid} 查看内存对象的散布
3:jmap -heap {pid}
元空间类加载状况追踪:

1:jstat -class {pid}
2:jmap -clstats {p
元空间内存应用状况追踪:

1:增加jvm参数-XX:NativeMemoryTracking=summary

jcmd {pid} VM.native_memory

整个memory次要蕴含了Java Heap、Class、Thread、Code、GC、Compiler、Internal、Other、Symbol、Native Memory Tracking、Arena Chunk这几局部;其中reserved示意利用可用的内存大小,committed示意利用正在应用的内存大小
Java Heap局部示意heap内存目前占用了多少MB;Class局部示意曾经加载的classes多少个,其metadata占用了多少MB;Thread局部示意目前有多少个线程,占用了多少MB;Code局部示意JIT生成的或者缓存的instructions占用了多少MB;GC局部示意目前曾经占用了多少MB的内存空间用于帮忙GC;Code局部示意compiler生成code的时候占用了多少MB;Internal局部表示命令行解析、JVMTI等占用了多少MB;Other局部示意尚未归类的占用了多少MB;Symbol局部示意诸如string table及constant pool等symbol占用了多少MB;Native Memory Tracking局部示意该性能本身占用了多少MB;Arena Chunk局部示意arena chunk占用了多少MB
gc追踪:

jstat -gc {pid}
cpu耗时/线程信息追踪:

1:应用查看jmc.exe
增加jvm参数:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true,disk=true,repository={filePath},maxage=6m,settings=default
2:top -H -p {pid} 获取过程的线程资源占用信息 (无需重启)
jstack pid >> xx.txt 获取过程的线程信息
java -jar jcaxx.jar。在软件里关上a,就能够看到线程栈的状况(https://www.ibm.com/support/p... 能够下载 开源工具)

堆外内存追踪

1:cat /proc/{pid}/smaps
Size:示意该映射区域在虚拟内存空间中的大小。
Rss:示意该映射区域以后在物理内存中占用了多少空间      
Shared_Clean:和其余过程共享的未被改写的page的大小
Shared_Dirty: 和其余过程共享的被改写的page的大小
Private_Clean:未被改写的公有页面的大小。
Private_Dirty: 已被改写的公有页面的大小。
Swap:示意非mmap内存(也叫anonymous memory,比方malloc动态分配进去的内存)因为物理内存不足被swap到替换空间的大小。
Pss:该虚拟内存区域平摊计算后应用的物理内存大小(有些内存会和其余过程共享,例如mmap进来的)。比方该区域所映射的物理内存局部同时也被另一个过程映射了,且该局部物理内存的大小为1000KB,那么该过程摊派其中一半的内存,即Pss=500KB。
2 pmap -x {pid}
Address: start address of map 映像起始地址
Kbytes: size of map in kilobytes 映像大小     
RSS: resident set size in kilobytes 驻留集大小
Dirty: dirty pages (both shared and private) in kilobytes 脏页大小
Mode: permissions on map 映像权限: r=read, w=write, x=execute, s=shared, p=private (copy on write)
Private_Dirty: 已被改写的公有页面的大小。
3:google-perftools 它的原理是在java利用程序运行时,当调用malloc时换用它的libtcmalloc.so,这样就能做一些统计了它的原理是在java利用程序运行时,当调用malloc时换用它的libtcmalloc.so,这样就能做一些统计了。