JVM生产环境常用参数配置及调优建议
一、生产常用参数配置
JAVA_OPTS="-server -Xms4G -Xmx4 -Xmn2G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8 -XX:G1HeapRegionSize=16m -XX:MaxGCCount=10 -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:-UseGCOverheadLimit -XX:+UseCompressedOops -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heap/ -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./g1-gc.log
二、常用参数详解
以下表格里面的参数是以G1垃圾收集器为例,适用JDK8版本,列举生产环境常用的参数,大家可根据自身实际情况进行选择。
参数 |
含义 |
说明 |
-server | 服务端模式 | 启动 Server VM(适用Web应用),优化应用程序的性能,适用于长期运行的生产环境,除此之外还有Client模式(适用C/S桌面程序) |
-Xms | 堆的初始大小 | JVM 启动时堆内存的初始分配大小 |
-Xmx | 堆的最大大小 | 堆内存的最大可用内存 |
-Xmn | 新生代(Young Generation) 的大小 | 新生代用于存放新创建的对象,JVM 会先进行年轻代的垃圾收集 |
-XX:+UseG1GC | 启用 G1垃圾收集器 | 适用于低延迟、高吞吐量的服务端应用。G1 具有低停顿时间的优势,并且能够预测 GC 的时间,适用2GB 及以上大内存 |
-XX:MaxGCPauseMillis | 设置目标最大GC暂停时间(毫秒) | G1 会尽量保证垃圾回收的暂停时间不超过这个值,减少对应用的影响 |
-XX:InitiatingHeapOccupancyPercent | 设置G1GC触发垃圾回收的堆占用百分比 | 默认值为45%,即当堆使用率达到45%时,G1开始进行并发标记周期,并进行垃圾回收 |
-XX:ParallelGCThreads | 设置并行GC线程数 | 线程数设置为 CPU 核心数的 2 倍较为合适 |
-XX:ConcGCThreads | 设置并发GC线程数 | 合适的值可以加速并行 GC,但也会增加 CPU 的负载,建议也是CPU核心数2倍 |
-XX:G1HeapRegionSize | 设置每个Region区域的大小 | 默认情况下,G1GC 会将堆分为 2048 个区域。调整此参数时需要考虑堆的大小以及系统需求 |
-XX:MaxGCCount | 设置G1规定时间内的最大暂停次数 | 控制 G1GC 停顿次数的限制 |
-XX:MetaspaceSize | 设置 Metaspace 区域的初始大小 | 元空间用于存放类的元数据信息,例如类的结构、方法等信息 |
-XX:MaxMetaspaceSize | 设置 Metaspace(类元数据空间)的最大大小 | Metaspace 存 |