JVM参数调优
• GC日志参数
-XX:+PrintGC
|
输出GC日志
|
-XX:+PrintGCDetails
|
输出GC的详细日志
|
-XX:+PrintGCTimeStamps
|
输出GC的时间戳(以基准时间的形式)
|
-XX:+PrintGCDateStamps
|
输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
|
-XX:+PrintHeapAtGC
|
在进行GC的前后打印出堆的信息
|
-Xloggc:../logs/gc.log
|
日志文件的输出路径
|
• 公共参数
-Xms |
Heap area size when starting JVM 启动JVM时的堆内存空间。 |
-Xmx |
Maximum heap area size 堆内存最大限制 |
-XX:NewRatio |
Ratio of New area and Old area 新生代和老年代的占比 |
-XX:NewSize |
New area size 新生代空间 |
-XX:SurvivorRatio |
Ratio ofEdenarea and Survivor area 伊甸园空间和幸存者空间的占比 |
• G1参数
-XX:+UseG1GC | 启用 G1 (Garbage First) 垃圾收集器 |
-XX:MaxGCPauseMillis |
设置允许的最大GC停顿时间(GC pause time),这只是一个期望值, 实际可能会超出,可以和年轻代大小调整一起并用来实现。默认是200ms |
-XX:G1HeapRegionSize |
每个分区的大小,默认值是会根据整个堆区的大小计算出来,范围是1M~32M, 取值是2的幂,计算的倾向是尽量有2048个分区数。比如如果是2G的heap,那region=1M。16Gheap,region=8M |
-XX:MaxTenuringThreshold=n | 晋升到老年代的“年龄”阀值,默认值为 15 |
-XX:InitiatingHeapOccupancyPercent |
一般会简写IHOP,默认是45%,这个占比跟并发周期的启动相关,当空间占比达到这个值时, 会启动并发周期。如果经常出现FullGC,可以调低该值,尽早的回收可以减少FullGC的触发, 但如果过低,则并发阶段会更加频繁,降低应用的吞吐 |
-XX:G1NewSizePercent | 年轻代最小的堆空间占比,默认是5% |
-XX:G1MaxNewSizePercent | 年轻代最大的堆空间占比,默认是60% |
-XX:ConcGCThreads | 并发执行的线程数,默认值接近整个应用线程数的1/4 |
-XX:G1HeapWastePercent | 允许的浪费堆空间的占比,默认是5%。如果并发标记可回收的空间小于5%,则不会触发MixedGC |
-XX:G1MixedGCCountTarget | 一次全局并发标记之后,后续最多执行的MixedGC次数。 默认值是8 |
-XX:MetaspaceSize | 初始化元空间大小,控制发生GC阈值 |
-XX:MaxMetaspaceSize | 限制元空间大小上限,防止异常占用过多物理内存 |
在JDK1.8版本废弃了永久代,替代的是元空间(MetaSpace),元空间与永久代上类似,都是方法区的实现,他们最大区别是:元空间并不在JVM中,而是使用本地内存。
元空间有注意有两个参数:
- MetaspaceSize :初始化元空间大小,控制发生GC阈值
- MaxMetaspaceSize : 限制元空间大小上限,防止异常占用过多物理内存