jvm常用参数说明 - shenjiejiehs/docs GitHub Wiki

Java进程常用参数说明

查看JDK参数

查看并行收集线程
/usr/jdk1.8.0_101/bin/java -server -Xmx1024m -Xms1024m -XX:+UseConcMarkSweepGC -XX:+PrintFlagsFinal -version| grep ParallelGCThreads

内存控制参数

参数名 说明
-Xms128m 初始的内存
-Xmx256m 最大堆内存
-Xmn128m 设置新生代内存,和NewRatio有相同的作用,可以不用设置
-Xss256k 线程栈Stack Space,一般情况下可以给256k,实测最小228k,JDK默认给的是1MB的内存
如果多层递归发现StackOverFlow,可以适当调大,调小这个参数可以开启更多的线程

-XX参数

-XX后面有部分参数可以跟+或者-,+表示开启,-表示禁用
比如 -XX:+UseGCOverheadLimit,就表示GC时间过长抛OOM -XX:-UseGCOverheadLimit,就表示GC时间过长不要抛OOM

参数名 说明
-XX:PermSize=64m 初始的永久区大小,<=JDK7可用
-XX:MaxMaxPermSize=128m 最大的永久区大小,<=JDK7可用
-XX:MetaspaceSize=64m 初始的永久区大小,>=JDK8可用
-XX:MaxMetaspaceSize=256m 最大的永久区大小,>=JDK8可用
-XX:NewRatio=1 新生代占1/2,默认情况,新生代占1/3,公式为1/(1+n)
-XX:-UseBiasedLocking 取消偏向锁,在synchronized上的 优化,取消对性能有提升
-XX:AutoBoxCacheMax=20000 Integer i = 3;这语句有着 int自动装箱成Integer的过程,JDK默认只缓存 -128 ~ +127的int 和 long
-XX:+PerfDisablesharedMem 禁止在/tmp/hperf[用户名] 路径上写入进程统计文件,jps,jstat,远程查看jvm状态也不能用了
-XX:-UseGCOverheadLimit 限制GC的运行时间。如果GC耗时过长,就抛OOM
-XX:-OmitStackTraceInFastThrow 2W次异常后,不打印异常栈,建议禁用,不方便查问题
-XX:+UseParNewGC 新生代并行收集
-XX:+UseConcMarkSweepGC 老年代并发收集
-XX:CMSInitiatingOccupancyFraction=75 老年代收集的触发的比例
-XX:+UseCMSInitiatingOccupancyOnly 强制使用上面的触发比例
-XX:MaxTenuringThreshold=2 对象在Survivor区熬过多少次Young GC后晋升到年老代
-XX:+HeapDumpOnOutOfMemoryError 如果出现OutOfMemory,dump内存到文件中,默认情况下dump到当前用户目录
-XX:HeapDumpPath=/home/checkin/dump 指定dump的目录
-XX:+ExplicitGCInvokesConcurrent 显式的System.gc()的调用会使用CMS方式
-XX:+DisableExplicitGC 不允许显式调用System.gc(),此选项最好不要加,有些堆外内存分配依赖显式 gc 调用,关闭之后容易导致 OOM
-XX:+PrintGCDetails 打印GC详细情况
-XX:+PrintGCDateStamps 打印GC的时间戳
-verbose:gc 打印gc日志
-Xloggc:gc.log 日志存放在当前路径下,文件名为gc.log,可以使用相对路径和绝对路径

JDK1.7及以下版本参数
-Xms128m -Xmx512m -Xss256k -server -XX:PermSize=32m -XX:MaxPermSize=256m -XX:NewRatio=1 -XX:-UseBiasedLocking -XX:AutoBoxCacheMax=20000 -XX:-UseGCOverheadLimit -XX:-OmitStackTraceInFastThrow -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:MaxTenuringThreshold=2 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:gc.log

JDK1.8及以上版本参数
-Xms128m -Xmx512m -Xss256k -server -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=256m -XX:NewRatio=1 -XX:-UseBiasedLocking -XX:AutoBoxCacheMax=20000 -XX:-UseGCOverheadLimit -XX:-OmitStackTraceInFastThrow -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:MaxTenuringThreshold=2 -XX:+HeapDumpOnOutOfMemoryError -XX:+ExplicitGCInvokesConcurrent -XX:+PrintGCDetails -XX:+PrintGCDateStamps -verbose:gc -Xloggc:gc.log

参考

关键业务系统的JVM参数推荐(2016热冬版) http://calvin1978.blogcn.com/articles/jvmoption-2.html
JVM调优总结 -Xms -Xmx -Xmn -Xss http://unixboy.iteye.com/blog/174173/
java高分局之JVM命令参数大全(高级垃圾回收选项)http://blog.csdn.net/maosijunzi/article/details/46562489