【Java】JDK8 jvm参数配置及说明

参数

说明

1.堆内存参数设置

-Xms

-XX:InitialHeapSize=n

设置堆的初始值

指令1:-Xms2g
指令2:-XX:InitialHeapSize=2048m

-Xmx

-XX:MaxHeapSize=n

设置堆区最大值
指令1:-Xmx2g
指令2: -XX:MaxHeapSize=2048m
-XX:NewSize=n 设置年轻代大小

-Xss

-XX:ThreadStackSize=n

每个线程堆栈最大值

指令1:-Xss256k
指令2:-XX:ThreadStackSize=256k
注意:

默认堆栈大小为1M,应该128K就够用,大的堆栈建议256K,栈设置太大,会导致线程创建减少。栈设置小,会导致深入不够,深度的递归会导致栈溢出

-Xmn

-XX:MaxNewSize=n

新生代内存配置
指令1:-Xmn512m
指令2:-XX:MaxNewSize=512m
-XX:SurvivorRatio=n

2个survivor区和Eden区大小比率
指令:-XX:SurvivorRatio=8(默认)

年轻代中Eden区与两个Survivor区的比值.注意Survivor区有两个,S区和Eden区在新生代比例为1:8,两个S区2:8

-XX:NewRatio=n

新生代和老年代的占比
-XX:NewRatio=2(默认)

表示新生代:老年代 = 1:2 即老年代占整个堆的2/3;默认值=2

如果-Xms==-Xmx,且设置了-Xmn的情况下,不用设置此参数。

-Duser.timezone=GMT+08 指定时区
‐Dfile.encoding=UTF‐8 指定默认的文件编码

2.垃圾回收器设置

-XX:+PrintGC

简单打印GC日志
-XX:+PrintGCDetails 详细打印GC日志
-XX:+PrintHeapAtGC 打印GC前后详细的堆栈信息
-XX:+PrintGCTimeStamps GC发生时,额外输出GC发生的时间,该输出时间为虚拟机启动后的时间偏移量
-XX:+PrintGCDateStamps GC发生时,带时区的日期打印
-XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,应用程序未中断执行时间
-XX:+PrintGCApplicationStoppedTime 打印应用程序由于GC而产生的停顿时间
-XX:+PrintReferenceGC 跟踪系统内的软引用,弱引用,虚引用和Finallize队列

2.1 GC回收日志打印

-Xloggc:log/gc.log

指定gc日志输出的文件路径。

JDK8开始支持使用%p,%t等占位符来指定GC输出文件。分别表示进程pid和启动时间戳。

例如: 

-Xloggc:/data/gclog/gc.log 固定路径名称生成

-Xloggc:/data/gclog/gc-%t.log  根据时间生成

-Xloggc:/data/gclog/gc-%p.log  根据进程pid生成

-XX:+UseGCLogFileRotation 滚动生成日志
日志文件达到一定大小后,生成另一个文件,须配置-Xloggc
-XX:NumberOfGCLogFiles=n -XX:NumberOfGCLogFiles=4 滚动GC日志文件数,默认0,不滚动,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发
-XX:GCLogFileSize=n -XX:GCLogFileSize=100k GC文件滚动大小,需配置UseGCLogFileRotation,设置为0表示仅通过jcmd命令触发

2.2 堆内存溢出配置

-XX:+HeapDumpOnOutOfMemoryError

内存溢出时导出整个堆信息,让JVM遇到OOM异常时能输出堆内信息,并通过(-XX:+HeapDumpPath)参数设置堆内存溢出快照输出的文件地址

-XX:+HeapDumpOnOutOfMemoryError

-XX:HeapDumpPath=./log/dump/

-XX:HeapDumpPath 指定导出堆的存放路径
-XX:OnOutOfMemoryError=“”

利用这个参数,我们可以在系统OOM后,自定义一个脚本,可以用来发送邮件告警信息,可以用来重启系统等等。

-XX:OnOutOfMemoryError="/opt/local/bin/alert.sh"

-XX:+HeapDumpBeforeFullGC 实现在Full GC前dump
-XX:HeapDumpPath=/logs/设置Dump保存的路径
-XX:+HeapDumpAfterFullGC

实现在Full GC后dump

-XX:HeapDumpPath=/logs/设置Dump保存的路径

2.3 垃圾回收器配置

-XX:+UseSerialGC 允许使用串行垃圾收集器。对于不需要垃圾收集的任何特殊功能的小型和简单应用程序,这通常是最佳选择。默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。
-XX:+UseParallelGC

允许使用并行清除垃圾收集器(也称为吞吐量收集器),通过利用多个处理器来提高应用程序的性能。

默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。如果已启用,则会-XX:+UseParallelOldGC自动启用该选项,除非您明确禁用它。

-XX:+UseParalledlOldGC 允许将并行垃圾收集器用于完整的GC。默认情况下,禁用此选项。启用它会自动启用该-XX:+UseParallelGC选项。
-XX:+UseConcMarkSweepGC

允许为老年代使用CMS垃圾收集器。Oracle建议您在spam(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一种选择。

默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。启用此选项后,将-XX:+UseParNewGC自动设置该选项,您不应禁用该选项,因为JDK 8中已弃用以下选项组合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC

-XX:+UseParNewGC 允许在年轻代中使用并行线程进行收集。默认情况下,禁用此选项。设置-XX:+UseConcMarkSweepGC选项时会自动启用它。使用-XX:+UseParNewGC不带选项-XX:+UseConcMarkSweepGC的选择是在JDK 8弃用
-XX:+UseG1GC 允许使用垃圾优先(G1)垃圾收集器。它是一个服务器式垃圾收集器,针对具有大量RAM的多处理器机器。它以高概率满足GC暂停时间目标,同时保持良好的吞吐量。G1收集器推荐用于需要大堆(大小约为6 GB或更大)且GC延迟要求有限的应用(稳定且可预测的暂停时间低于0.5秒)
-XX:ParallelGCThreads=n

GC并行执行线程数

-XX:ParallelGCThreads=16

3.辅助指令(查看或修改正在运行的JVM 某项配置)

jinfo -flag 参数 pid

查看HeapDumpOnOutOfMemoryError 配置是否开启

jinfo -flag HeapDumpOnOutOfMemoryError 10001

修改HeapDumpOnOutOfMemoryError 配置(-关闭 +开启)

jinfo -flag +HeapDumpOnOutOfMemoryError 10001

-XX:+PrintFlagsFinal

查看jvm参数配置

-XX:+PrintFlagsFinal |grep GC 查看与GC相关参数配置

-XX:+PrintCommandLineFlags

打印已经被用户或者当前虚拟机设置过的参数

-XX:+PrintCommandLineFlags -version 查看GC堆的初始大小以及GC收集器类型

4.JDK8的JVM启动参数默认配置

  • -Xms2g -Xmx2g (按不同容器,4G及以下建议为50%,6G以上,建议设置为70%)
  • -XX:MetaspaceSize=128m
  • -XX:MaxMetaspaceSize=512m
  • -Xss256k
  • -XX:+UseG1GC
  • -XX:MaxGCPauseMillis=200
  • -XX:AutoBoxCacheMax=20000
  • -XX:+HeapDumpOnOutOfMemoryError (当JVM发生OOM时,自动生成DUMP文件)
  • -XX:HeapDumpPath=/data/logs/gc/
  • -XX:ErrorFile=/data/logs/gc/hs_err_%p.log (当JVM发生崩溃时,自动生成错误日志)
  • -XX:+PrintGCApplicationStoppedTime
  • -XX:+PrintGCDetails
  • -XX:+PrintGCDateStamps
  • -Xloggc:/data/logs/gc/gc-ePrint-service.log

4.禁止和废弃参数选项

-Xincgc

启用增量垃圾收集。此选项在JDK 8中已弃用,无需替换。

-Xrun libname

加载指定的调试/分析库。此选项已被该选项取代-agentlib

-XX:CMSIncrementalDutyCycle = 百分比

设置允许并发收集器运行的次要集合之间的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode

-XX:CMSIncrementalDutyCycleMin = 百分比

设置次要集合之间的时间百分比(0到100),它-XX:+CMSIncrementalPacing是启用时占空比的下限。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalMode

启用CMS收集器的增量模式。此选项在JDK 8中已弃用,没有替换,以及其他选项CMSIncremental

-XX:CMSIncrementalOffset = 百分比

设置增量模式占空比在次要集合之间的时间段内向右移动的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode

-XX:+ CMSIncrementalPacing

根据JVM运行时收集的统计信息,启用增量模式占空比的自动调整。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode

-XX:CMSIncrementalSafetyFactor = 百分比

设置计算占空比时用于添加保守性的时间百分比(0到100)。在弃用选项后,此选项在JDK 8中已弃用,没有替换-XX:+CMSIncrementalMode

-XX:CMSInitiatingPermOccupancyFraction = 百分比

设置启动GC的永久生成占用率(0到100)的百分比。此选项在JDK 8中已弃用,无需替换。

-XX:MaxPermSize = size

设置最大永久生成空间大小(以字节为单位)。此选项在JDK 8中已弃用,并由该-XX:MaxMetaspaceSize选项取代。

-XX:PermSize = size

设置分配给永久生成的空间(以字节为单位),如果超出则会触发垃圾回收。此选项在JDK 8中已弃用,并被该-XX:MetaspaceSize选项取代。

-XX:+ UseSplitVerifier

允许拆分验证过程。默认情况下,此选项在先前版本中已启用,验证分为两个阶段:类型引用(由编译器执行)和类型检查(由JVM运行时执行)。此选项在JDK 8中已弃用,现在默认情况下会对验证进行拆分,而无法将其禁用。

-XX:+ UseStringCache

启用常用分配字符串的缓存。此选项已从JDK 8中删除,无需替换。

猜你喜欢

转载自blog.csdn.net/smallbirdnq/article/details/132967867