JVM GC相关参数总结

1. GC打印日志的必要参数:

  • -XX:+PrintGCDetails:打印详情GC日志
  • -XX:+PrintGCDateStamps:打印GC发生时的时间戳
  • -XX:+PrintGCApplicationStoppedTime:打印发送STW的时间
  • -Xloggc:d:/logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M :保存GC日志位置,开启日志文件分割 ,滚动写文件个数,每个文件大小
  • XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/dump:开启内存溢出时,打印dump

        汇总如下

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -Xloggc:d:/logs/gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M  -XX:+HeapDumpOnOutOfMemoryError  -XX:HeapDumpPath=d:/dump

2. 配置垃圾回收器参数:

  • -XX:+UseSerialGC = S erial New (DefNew) + Serial Old 小型程序,默认情况下不会是这种选项。
  • -XX:+UseParNewGC = ParNew + SerialOld 这个组合已经很少用(在某些版本中已经废弃)
  • -XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
  • -XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
  • -XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
  • -XX:+UseG1GC = G1

3. 开启远程链接参:

java -Djava.rmi.server.hostname=192.168.17.11  # 远程服务器ip,外网ip
-Dcom.sun.management.jmxremote  # 允许JMX远程调用
-Dcom.sun.management.jmxremote.port=2023  # 自定义jmx端口号
-Dcom.sun.management.jmxremote.rmi.port=2024 #自定义rmi端号(Tips:不要忘记设置,否则链接不上)
-Dcom.sun.management.jmxremote.authenticate=false  # 是否需要ssl 安全连接方式
-Dcom.sun.management.jmxremote.ssl=false #是否需要秘钥
-jar test.jar 

4. GC参数汇总:

通用参数:

  • -Xmn -Xms -Xmx -Xss:年轻代 最小堆 最大堆 栈空间
  • -XX:+UseTLAB(一般不需要改):使用TLAB,默认打开
  • -XX:+PrintTLAB(一般不需要改):使用打印TLAB的使用情况
  • -XX:TLABSize(一般不需要改):使用设置TLAB大小
  • -XX:+DisableExplictGC:使System.gc()不管用 ,System.gc()是FGC
  • -XX:+PrintGC:打印GC
  • -XX:+PrintGCDetails:打印GC详情
  • -XX:+PrintHeapAtGC:在GC的前后打印出堆的信息
  • -XX:+PrintGCTimeStamps:打印GC发生的时间戳,以JVM启动时间为基准
  • -XX:+PrintGCApplicationConcurrentTime (重要性低):打印应用程序时间
  • -XX:+PrintGCApplicationStoppedTime(重要性低):打印暂停时长
  • -XX:+PrintReferenceGC(重要性低):记录回收了多少种不同引用类型的引用
  • -verbose:class:类加载详细过程
  • -XX:+HeapDumpOnOutOfMemoryError:如果OOM,默认生成一个dump
  • -XX:+PrintVMOptions:程序运行时,打印虚拟机接受到的命令行显式参数
  • -XX:+PrintFlagsFinal:打印相关参数,可以对参数进行查找,主要查看修改更新 -> 等号是JVM默认加载的参数,有冒号:= 表示人为修改之后的参数
  • -XX:+PrintFlagsInitial:打印相关参数,可以对参数进行查找,查看初始默认值
  • 以下这些不建议设置:
  • -XX:MaxTenuringThreshold:升代年龄,最大值15
  • -XX:PreBlockSpin:锁自旋次数
  • -XX:CompileThreshold:热点代码检测参数
  • 逃逸分析 标量替换 ...

Parallel常用参数:

  • -XX:SurvivorRatio(一般不需要改)
  • -XX:PreTenureSizeThreshold: 大对象设置多大
  • -XX:+ParallelGCThreads:并行收集器的线程数,同样适用于CMS,一般设为和CPU核数相同
  • -XX:+UseAdaptiveSizePolicy:自动选择各区大小比例

CMS常用参数:

  • -XX:+UseConcMarkSweepGC
  • -XX:ParallelCMSThreads:CMS线程数量,默认是核的一半
  • -XX:CMSInitiatingOccupancyFraction:使用多少比例的老年代后开始CMS收集,默认是68%(近似值),如果频繁发生SerialOld卡顿,应该调小,但是会频繁CMS回收
  • -XX:+UseCMSCompactAtFullCollection:在FGC时进行压缩
  • -XX:CMSFullGCsBeforeCompaction:多少次FGC之后进行压缩
  • -XX:+CMSClassUnloadingEnabled(JDK1.8之前):对永久代进行垃圾回收
  • -XX:CMSInitiatingPermOccupancyFraction(JDK1.8之前):达到什么比例时进行Perm回收
  • GCTimeRatio:设置GC时间占用程序运行时间的百分比
  • -XX:MaxGCPauseMillis:建议值,停顿时间,GC会尝试用各种手段达到这个时间,比如减小年轻代

G1常用参数:

  • -XX:+UseG1GC
  • -XX:MaxGCPauseMillis:建议值,G1会尝试调整Young区的块数来达到这个值
  • -XX:GCPauseIntervalMillis:GC的暂停间隔时间
  • -XX:+G1HeapRegionSize:分区大小,建议逐渐增大该值,1 2 4 8 16 32。随着size增加,垃圾的存活时间更长,GC间隔更长,但每次GC的时间也会更长ZGC做了改进(动态区块大小)
  • G1NewSizePercent:新生代最小比例,默认为5%
  • G1MaxNewSizePercent:新生代最大比例,默认为60%
  • GCTimeRatio:GC时间建议比例,G1会根据这个值调整堆空间
  • ConcGCThreads:线程数量
  • InitiatingHeapOccupancyPercent:启动G1的堆空间占用比例

你可能感兴趣的:(jvm)