jvm运维操作

// 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,这样就能做一些统计了。

你可能感兴趣的:(java)