一、JVM常用基础配置
Ø
-
Xmn
:
新生代内存上限值
Ø
-
Xms
:
整个堆区初始内存分配的
大小
Ø
-
Xmx
:
整个堆区内存分配的最大上限,推荐
-
Xms
和
-
Xmx
设置等同大小,避免动态回收消耗
资源
Ø
-
XX:MetaspaceSize
=
(JDK1.8
支持
)
,对应
JDK1.8
以下的
-
XX:PermSize
=
,标识最小元空间
(
永久代
/
方法区
)
大小
Ø
-
XX:MaxMetaspaceSize
(JDK1.8
支持
)
,对应
JDK1.8
以下
的
-
XX:MaxPermSize
,标识最大元
空间
(
永久代
/
方法区
)
大小
Ø
-XX:+
HeapDumpOnOutOfMemoryError
当出现
OOM
时,打印堆转储
dump
文件
Ø
-
XX:HeapDumpPath
=
指定堆转储
dump
文件存储
路径
Ø
-
Dfile.encoding
=UTF-8
设置
系统文件编码格式
为
UTF-8
Ø
-XX:+
PrintGCDetails
输出出
GC
回收详细日志
Ø
-XX:+
PrintGCDateStamps
输出
GC
回收详细时间,记录为系统时间戳
Ø
-
Xloggc
:/
export/Logs/
jvm
/gc.log
记录
GC
回收日志的文件路径
Ø
-XX:+
PrintGCCause
(JDK1.8
支持
)
打印出
GC
回收的原因
Ø
-XX:+
DisableExplicitGC
:
手动配置禁止使用外部调用
System.gc
来进行触发垃圾回收
二、JVM常用优化配置
Ø
-XX:+
UseParNewGC
手动指定新生代
使用多线程收集
器
Ø
-XX:+
UseConcMarkSweepGC
:
手动指定老年代使用
CMS
收集
器
Ø
-XX:+
UseCMSInitiatingOccupancyOnly
:
不加这个选项的话,根据成本计算决定是否需要执行
CMS
gc
,加上这个选项,当旧生代空间使用率达到
92%
时会无条件执行
Full GC
Ø
-XX:+
CMSClassUnloadingEnabled
:
手动指定
CMS
收集器对非堆区域永久代进行回收,默认永久代不回收
Ø
-
XX:CMSInitiatingOccupancyFraction
=80 :
手动指定当老年代已用空间达到
80%
时,触发老年代回收
(
默认
92
%)
Ø
-
XX:CMSInitiatingPermOccupancyFraction
=80 :
手动指定当永久代已用空间达到
80%
时,触发永久代回收
(
默认
92%)
Ø
-
Xnoclassgc
:
关闭
CLASS
的垃圾回收功能,默认
20
分钟这个
class
未被使用,虚拟机会卸载这个类。再次使用时重新
加载
Ø
-XX:+
UseCMSCompactAtFullCollection
:
在进行
Full GC
时对内存进行压缩,
JDK1.6
以前不需要配置,默认
开启
Ø
-
XX:CMSFullGCsBeforeCompaction
=2 :
与
-XX:+
UseCMSCompactAtFullCollection
关联使用标识着每经过多少次
Full GC
触发对内存进行一次压缩,默认是
0
次
三、JVM配置调优-常见案例
在进行M配置调优时,是个持续优化的过程,并没有银弹。需要长时间不定时关注Xc+ PrintGcDetails
Xc+ PrintGcDateStamps配置产生的日志信息,并结合UMP、MDC监控平台数据,对系统中M配置进行优化调优
1、Yong GO执行耗时长,调优配置
将默认并行GC升级为并发GC
>-XX:+ UseParNewGC:手动指定新生代使用多线程收集器
调新生代Eden、s0、s1各分区比例
>-XX: SurvivorRatio=6:Eden区与 Survivor0、 Survivor1区的大小比值,建议设置为6,默认为8,Eden:S0S1=611
调整新生代中回收存活年龄
>-XX: Max Threshold=5:手动设置对象在新生代中存活年龄(存活次数),默认15次
2、Yong Gc执行频紫,调优配置
调整新生代、堆区域、元空问大小
>-Xmn:新生代内存上限值
>-Xms:整个堆区初始内存分配的大小
>-Xmx:整个堆区内存分配的最大上限,推荐ms和Xmx设置等同大小,避免动态回收消耗资源
>-XX: Metaspace Size=(DK18支持),对应DK18以下的 XX: PermSize=,标识最小元空间(永久代/方法区)大小
>-XX: MaxMetaspace Size(DK.8支持),对应DK18以下的 XX: MaxPermSize,标识最大元空间(永久代/方法区)大小
3、Full GC执行耗时长,调优配置
将默认并行Gc升级为发GC
>-XX:+ Use ConcMarkSweepGC:手动指定老年代使用CMS并发收集器
注:由于G1收集器未在实战中使用,暂不做介绍
开启 fullA压缩,并减少 Full go压缩次数有利有弊
>-XX:+ UseCMSCompactAtFullCollection:在进行Fu山GC时对内存进行压缩,开启 full GC压缩
>-XX: CMSFullGCsBeforeCompaction=2:与X+ se CMscompactAt FullCollection关联使用标识着每经过多少
次FuGC触发对内存进行一次压缩,默认是0次
4、无 Full GO内存持续增长,TP99增高
开启当老年代使用一定量后,强制触发Fu|Gc回收
>-XX:+ UseCMSinitiatingoccupancyon:不加这个选项的话,根据成本计算决定是否需要执行 CMs gC,加上这个
选项,当旧生代空间使用率达到92%时会无条件执行Fu|GC
>-XX:CMSInitiating Occupancy Fraction=80:手动指定当老年代已用空间达到80%时,触发老年代回收默认92%)
开启F叫GC对永久代回收(有利有弊)
>-XX:+ CMSClassUnloading Enabled:手动指定CMS收集器对非堆区域永久代进行回收,默认永久代不回收
>-XX: CMSInitiatingoccupancy Fraction=80:手动指定当永久代已用空间达到80%时,触发永久代回收(默认92%)