JVM一些参数说明:
-Xms:分配JVM堆初始化大小
-Xmx:分配JVM堆最大的大小
-Xmn:分配JVM新生代大小
-XX:+UseConcMarkSweepGC:老年代垃圾回收器使用CMS垃圾回收器
-XX:+UseG1GC:设置使用G1垃圾回收器
-XX:G1HeapRegionSize:设置G1垃圾回收器的Region大小
-XX:MaxTenuringThreshold:老年代晋升年龄,默认15
-XX:MaxGCPauseMillis:设置一次GC停顿的时间,单位ms
-XX:MetaspaceSize:元数据空间大小
-XX:MaxMetaspaceSize:元数据空间最大大小
-XX:CMSInitiatingOccupancyFraction:老年代使用到何种程度时开始触发并发标记清除(CMS)垃圾收集
-XX:CMSFullGCsBeforeCompaction:多少次CMS垃圾回收后执行一次FullGC进行空间压缩
-XX:+HeapDumpOnOutOfMemoryError:当JVM遇到OutOfMemoryError时自动生成堆转储文件(dump文件)
-XX:HeapDumpmpPath:dump文件存储路径
-Xloggc:打印gc日志路径
-XX:+PrintGC:输出GC日志
-XX:+PrintGCDetails:输出GC详细日志
-XX:+PrintHeapAtGC:在进行GC前后打印堆的信息
JVM参数调优:
1.-Xms 和 -Xmx 保持一致避免GC内存伸缩引起的性能问题
2.-Xmn设置为-Xms的一半,为的是保证大部分对象都留在新生代,仅通过minor GC就可以把对象回收,同时也可以避免大对象直接分配到老年代
3.-Xms 和 -Xmx 设置的值一般为物理内存的1/4,可根据自身项目要求进行调整
4.-XX:+UseConcMarkSweepGC:设置老年代垃圾回收器使用CMS垃圾回收器,提升垃圾回收效率
5.-XX:+UseG1GC:设置使用G1垃圾回收器,如果堆内存设置的是8G以上且对停顿时间有要求推荐使用G1垃圾回收器(jdk必须是1.7以上版本),其中-XX:MaxGCPauseMillis 用于设置垃圾回收停顿时间
6.-XX:G1HeapRegionSize:设置G1垃圾回收器的Region大小
7.-XX:MaxTenuringThreshold:老年代晋升年龄,默认15,该值主要影响新生代对象成为老年代对象的快慢问题,如果该值过大会导致新生代对象迟迟不能成为老年代对象,而占用新生代空间
8.-XX:MetaspaceSize:元数据空间大小,保存java的Class相关信息以及常量池,一般建议128或者256M,可根据实际项目需要调整,如果项目用到的动态代理十分多,可以加大这个参数
10.-XX:CMSInitiatingOccupancyFraction:建议值为70,即老年代占用比达到70%时开启CMS回收
11.-XX:CMSFullGCsBeforeCompaction:这个值推荐设置10,以防止过多的内存碎片产生
12.-XX:+HeapDumpOnOutOfMemoryError:建议加上,用于后续帮助诊断内存泄露或优化内存
13.-XX:HeapDumpmpPath:建议设置一下路径即可,不用设置文件名,名称自动会以java_pid{进程号}.hprof命名
14.-Xloggc:如果需要gc日志可开启收集
JVM调优推荐设置:
针对JVM一般性设置,推荐
-Xms512m
-Xmx512m
-Xmn256m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=128m
-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=8
-XX:CMSInitiatingOccupancyFraction=70
-XX:CMSFullGCsBeforeCompaction=10
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
针对项目对JVM内存有一定要求的场景,推荐
-Xms2048m
-Xmx2048m
-Xmn1024m
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=256m
-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=8
-XX:CMSInitiatingOccupancyFraction=70
-XX:CMSFullGCsBeforeCompaction=10
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
针对项目对JVM内存有超高要求并且JVM堆内存可以设置到8G的场景,推荐
-Xms8192m
-Xmx8192m
-Xmn4096M
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:G1HeapRegionSize=2m
-XX:MaxGCPauseMillis=100
-XX:MaxTenuringThreshold=8
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./
如果需要收集GC日志可以添加:
-Xloggc:./gc.log
如果需要打印GC日志可以添加:
-XX:+PrintGCDetails
-XX:+PrintHeapAtGC