# JVM参数

# 常用的JVM参数设置

以下分版本列出了JVM常用的参数设置(分为Java8、Java13)

# Java8

参数 意义
-verbose:gc 打印 GC 日志
PrintGCDetails 打印详细 GC 日志
PrintGCDateStamps 系统时间,更加可读,PrintGCTimeStamps 是 JVM 启动时间
PrintGCApplicationStoppedTime 打印 STW 时间
PrintTenuringDistribution 打印对象年龄分布,对调优 MaxTenuringThreshold 参数帮助很大
loggc 将以上 GC 内容输出到文件中

OOM相关参数:

参数 意义
HeapDumpOnOutOfMemoryError OOM 时 Dump 信息,非常有用
HeapDumpPath Dump 文件保存路径
ErrorFile 错误日志存放路径
OmitStackTraceInFastThrow 缩简日志输出,默认开启的。
开启时,如果你多次发生了空指针异常,将只会打印java.lang.NullPointerException,而不会打印堆栈信息。
通常需要修改为关闭。

# Java13

从Java9开始移除了40多个GC日志相关的参数,所以相关配置变化很大。

JAVA_OPT_LOG=" -verbose:gc"
JAVA_OPT_LOG="${JAVA_OPT_LOG} -Xlog:gc,gc+ref=debug,gc+heap=debug,gc+age=trace:file=${LOG_DIR}/gc_%p.log:tags,uptime,time,level"
JAVA_OPT_LOG="${JAVA_OPT_LOG} -Xlog:safepoint:file=${LOG_DIR}/safepoint_%p.log:tags,uptime,time,level"
JAVA_OPT_OOM=" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_DIR} -XX:ErrorFile=${LOG_DIR}/hs_error_pid%p.log "
JAVA_OPT="${JAVA_OPT_LOG} ${JAVA_OPT_OOM}"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
echo $JAVA_OPT

# Q&A

  • 为什么建议将Xmx和Xms设置成一样的?
  • 如果各个区参数未设置好,存在动态扩容问题是个什么场景?
  • MinorGC和MajorGC跟youngGC和FullGC的区别?
  • JVM中如何设置参数?生产上做过哪些参数设置?
  • 做过哪些JVM参数优化?

内存分配参数:

  • Xms
  • Xmx
  • Xmn
  • PermSize/MetaspaceSize
  • MaxPermSize/MetaspaceSize
  • Xss

GC策略参数:

  • SurvivorRatio
  • PretenureSzieThreshold
  • MaxTenuringThreshold
  • ParallelRefProcEnabled
  • ParallelGCThreads
  • UseSerialGC
  • UseParNewGC
  • CMSParallelRemarkEnabled
  • UseParallelGC
  • UseAdaptiveSizePolicy
  • MaxTimeRatio
  • MaxGCPauseMillis(常和G1配合使用)
  • UseParallelOldGC
  • UseConcMarkSweepGC
  • CMSInitiatingOccupancyFraction
  • UseCMSInitiatingOccupancyOnly
  • UseCMSCompactAtFullCollection
  • CMSFullGCsBeforeCompaction
  • CMSClassUnloadingEnabled
  • UseG1GC
  • DisableExplicitGC

G1配置参数:

  • G1NewSizePercent
  • G1MaxNewSziePercent
  • G1HeapRegionSize
  • ConcGCThreads
  • InitiatingHeapOccupancyPercent
  • G1HeapWastePercent
  • G1MixedGCCountTarget
  • G1PrintRegionLivenessInfo
  • G1ReservePercent
  • G1SummarizeRSetStats
  • G1TraceConcRefinement
  • GCTimeRatio

GC日志参数:

  • Xloggc
  • UseGCLogFileRotation
  • NumberOfGCLogFiles
  • GCLogFileSize
  • PrintGCDetails
  • PrintGCDateStamps
  • PrintTenuringDistribution
  • PrintGCApplicationStoppedTime
  • PrintHeapAtGC

异常参数:

  • HeapDumpOnOutOfMemoryError(-XX:+HeapDumpOnOutOfMemoryError)
  • HeapDumpPath(-XX:HeapDumpPath=/data/dump/jvm.dump)

其他:

  • server(-server)
  • TieredCompilation(-XX:+TieredCompilation)

# 资料参考

jvm参数设置参考 (opens new window)

修改于: 8/11/2022, 3:17:56 PM