jvm参数及命令

extend:
SoftReference类型的fullgc并不会回收掉,fullgc后还没有空间装下对象就会再次发生fullgc回收掉SoftReference类型,如果第二次fullgc后空间还不够,就会发生oom。
元空间不足,直接扩容,如果扩容到MetaspaceSize引发old gc(根据垃圾回收器决定,如果g1 的G1Old cms的CMS),卸载类并扩容,扩容到MaxMetaspaceSize,引发full gc 卸载类。

jstat -gc {pid} 查看jvm内存使用情况

   class {pid} 查看类加载情况
   gccause 上次和本次gc的发生的原因
   gcutil 查看gc情况

https://blog.csdn.net/yaoqian...

jmap -clstats {pid} 查看类加载情况

    no option: 查看进程的内存映像信息,类似 Solaris pmap 命令。
    heap: 显示Java堆详细信息
    histo[:live]: 显示堆中对象的统计信息
    finalizerinfo: 显示在F-Queue队列等待Finalizer线程执行finalizer方法的对象
    dump::生成堆转储快照
    F: 当-dump没有响应时,使用-dump或者-histo参数. 在这个模式下,live子参数无效.
    J:指定传递给运行jmap的JVM的参数

dump出来文件,使用jvisualvm.exe或者其他工具查看文件。jvm命令:jmap -dump:format=b,file=outfile {pid}

java -XX:+PrintFlagsFinal -version:查看jvm信息

$jinfo -flags {pid} :查看进程的jvm参数

   -flag  pid:打印指定JVM的参数值 
   -flag [+|-] pid:设置指定JVM参数的布尔值
   

pmap [ -x | -d ] [ -q ] pid:查看进程的内存映像信息

jvm参数
-verbose:class 查看类加载情况
-verbose:gc 查看虚拟机中内存回收情况
-verbose:jni 查看本地方法调用的情况
-XX:+PrintFlagsInitial查看初始值
-XX:+PrintFlagsFinal查看最终的值,因为初始值有可能被修改
-XX:+UnlockExperimentalVMOptions解锁实验参数,JVM中有些实验参数无法直接赋值,必须先使用此参数才能赋值
-XX:+UnlockDiagnosticVMOptions解锁诊断参数
-XX:+PrintCommandLineFlags打印命令行参数

-XX:MetaspaceSize=N和-XX:MaxMetaspaceSize=N,对于64位JVM来说,元空间的默认初始大小是20.75MB,默认的元空间的最大值是无限。MaxMetaspaceSize用于设置metaspace区域的最大值,这个值可以通过mxbean中的MemoryPoolBean获取到,如果这个参数没有设置,那么就是通过mxbean拿到的最大值是-1,表示无穷大。

由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值

在JVM参数中一定要设置HeapDumpAfterFullGC和HeapDumpOnOutOfMemoryError两个参数,可以在发送FGC和OOM的时候将当时的Java堆情况记录下来,用于事后分析;(2)GC日志要单独打印到一个日志文件中,方便分析,如果不特别设置,GC日志会打印到stdout.log中,会有其他的日志混合在中间,影响问题排查。

你可能感兴趣的:(java)