一、JVM参数类型
在生产环境中,一般情况下配置的参数有3种类型的:
- -X:非标准参数,不是每个虚拟机都实现了,例如-Xms2g
- -XX:非稳定性参数,例如-XX:NewSize=2g 使用方式有下面3种: -XX:+<option> 开启option参数 -XX:-<option> 关闭option参数 -XX:-<option>=<value> 将option参数的值设置为value
- -D:用于自定义参数,设置的值可以通过System.getProperty(String name)方法获取,例如:-Dlog.dir=/data/log
通过java -h命令,可以查看所有标准参数,常见的有-D、-version、-classpath
通过java -X命令,可以查看所有-X参数,常见的有-Xms、-Xmx、-Xss
二、内存管理参数
1、堆栈大小设置
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-Xms | 堆内存的1/64 | 堆的最小值 | -Xms1g |
-Xmx | 堆内存的1/4 | 堆的最大值 | -Xmx1g |
-Xss | 无 | 栈的大小 | -Xss1m |
-XX:NewSize | 无 | 堆中新生代的初始值 | -XX:NewSize=512m |
-XX:MaxNewSize | 无 | 堆中新生代的最大值 | -XX:MaxNewSize=512m |
-XX:MetaspaceSize | 无 | 方法区的初始值 | -XX:MetaspaceSize=256m |
-XX:MaxMetaspaceSize | 无 | 方法区的最大值 | -XX:MaxMetaspaceSize=512g |
-XX:NewRatio | 2 | 新生代和老年代的比值 | -XX:NewRatio=4(表示新生代:老年代=1:4,即新生代占堆的1/5) |
-XX:SurvivorRatio | 8 | 新生代中surviivor区和eden区的比值 | -XX:SurvivorRatio=8(表示survivor:eden=1:8,即一个survivor占新生代的1/10) |
-XX:+HeapDumpOnOutOfMemoryError | 默认关闭 | 发生OOM时自动dump堆转储文件 | |
-XX:HeapDumpPath | 无 | dump文件路径 | -XX:HeapDumpPath=/data/log/heapdump.bin |
2、垃圾回收设置
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-XX:+UseSerialGC | Client模式的虚拟机默认开启 | Client模式下,使用Serial+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParNewGC | 默认关闭 | 使用ParNew+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParallelGC | server模式的虚拟机默认开启 | 使用Parallel Scavenge+Serial Old的收集器组合进行垃圾回收 | |
-XX:+UseParallelOldGC | 默认关闭 | 使用Parallel Scavenge+Parallel Old的收集器组合进行垃圾回收 | |
-XX:+UseConcMarkSweepGC | 默认关闭 | 使用ParNew+CMS+Serial Old的收集器组合进行垃圾回收。如果CMS收集器出现Concurrent Mode Failure,则Serial Old收集器将作为后备收集器 | -XX:+UseConcMarkSweepGC |
-XX:ParallelCMSThreads | 小于等于8个CPU时默认值为CPU的个数,多于8个时比CPU的数量少 | 设置GC时进行内存回收的线程数 | -XX:ParallelCMSThreads=2 |
-XX:+PrintGCDetails | 默认关闭 | 发生垃圾回收时打印内存回收日志 | |
-XX:+PrintGCTimeStamps | 默认关闭 | 发生垃圾回收时打印回收时间 | |
-Xloggc | 无 | 设置GC记录的文件 | Xloggc:/data/log/tomcat/gc.log |
-XX:+UseGCLogFileRotation | 默认关闭 | 启用GC日志文件的自动转储 | |
-XX:GCLogFileSize | 默认关闭 | 控制GC日志文件的大小 | -XX:GCLogFileSize=1M |
3、多线程相关参数
参数 | 默认值 | 使用介绍 | 示例 |
---|---|---|---|
-XX:+UsedBiasedLocking | 默认开启 | 是否使用偏向锁 |
最后,给大家提供一个8核8G的机器常用的配置:-Xms6g-Xmx6g-Xss1m -XX:NewSize=2g -XX:MaxNewSize=4g -XX:NewRatio=4g -XX:SurvivorRatio=8 -XX:+AggressiveOpts -XX:+UseBiasedLocking -XX:+UseConcMarkSweepGC -XX:ParallelCMSThreads=2 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/data/log/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/heapdump.bin -XX:+CMSParallelRemarkEnabled -XX:+ScavengeBeforeFullGC -XX:CMSInitiatingOccupancyFraction=75
-XX:MetaspaceSize=8m