更多内容,前往 IT-BLOG-CN
【1】以-
开头的都是标准参数,所有JVM
都支持,并且向后兼容。
-version:gc
-server
【2】以-X
开头的为非标准参数,绝大多数都是控制JVM
的参数。在不同版本的jvm
中,参数可能会有所不同,并不保证所有jvm
实现都满足,且不保证向后兼容。可以通过java -X
查看非标准参数。
-Xmx2G
-Xms2G
-Xloggc:/data/kinyang/log/gc.%t.log
【3】以-XX:
开头的为非稳定参数,专门用于控制JVM
行为。主要用于JVM
的调优和debug
操作。将来可能会随时取消,需要慎重使用。
-XX:+UseParNewGC
-XX:CompileThreshold=10
-XX:HeapDumpPath=/data/kinyang/dump/heap/
-XX
:+
启用option
,例如:-XX:+PrintGCDetails
启动打印GC信息的选项,其中+
号表示true
,开启的意思
-XX
:-
不启用option
,例如:-XX:-PrintGCDetails
关闭启动打印GC信息的选项,其中-
号表示false
,关闭的意思
-XX
:=
设定option
的值为数字类型,可跟单位,例如32k
,1024m
,2g
。例如:-XX:MaxPermSize=64m
-XX
:=
设定option
的值为字符串,例如:-XX:HeapDumpPath="/data/kinyang/dump/heap/"
【4】以-D
开头的是系统参数赋值(可以是系统默认有的参数,也可以是自己定义的参数),在程序中可以通过System.getProperty(key)
获取和通过System.setProperty(key, value)
进行设置
-Dfile.encoding=UTF-8
-Dlog.path=/data/kinyang/test/log/
参数 | 含义 | 默认值 | 示例 | 说明 |
---|---|---|---|---|
-Xms | 初始堆大小 | 物理内存的1/64(<1GB) | -Xms7372m | |
-Xmx | 最大堆大小 | 物理内存的1/4(<1GB) | -Xmx12288m | 尽量设置的跟-Xms一样,防止因为内存不断增加后突然收缩带来的性能影响 |
-Xmn | 新生代大小 | -Xmn256M | 这个参数影响性能,尽量设置小一点 | |
-Xss | 指定线程栈的大小 | -Xss256k | 一般来说,WEBX框架下的应用需要256k | |
-Xloggc | gc日志文件路径 | -Xloggc:/usr/local/gc_%t_%p.log | 将gc信息打印到指定的文件中,通过时间戳生成文件名 |
参数 | 含义 | 示例 | 说明 |
---|---|---|---|
-XX:MetaspaceSize | 设置元空间大小 | -XX:MetaspaceSize=128m | 永久代被元空间取代,同时元空间不像永久代一样受制于堆内存。 元空间是基于操作系统内存的,理论上讲,可以一直扩展内存直到操作系统的极限,所以设置元空间大小时,建议加上-XX:MaxMetaspaceSize参数,给个范围限制,和-XX:MetaspaceSize参数值一样。 一般设置成256M即可,避免元空间占用的内存一直增长。 |
-XX:MaxMetaspaceSize | 设置元空间最大大小 | -XX:MaxMetaspaceSize=256m | |
-XX:MaxGCPauseMillis | GC最大的停顿毫秒数 | -XX:MaxGCPauseMillis=200 | 默认情况下,VM没有暂停时间目标值。参数应谨慎使用,太小的值将会导致更高频率的GC |
-XX:+UseG1GC | 使用G1收集器 | ||
-XX:-OmitStackTraceInFastThrow | 关闭“省略异常栈信息从而快速抛出” | 默认打开 | 必须关闭,否则会导致异常信息打印不全。 例如:只有java.lang.NullPointerException信息,没有完整的具体信息,展示什么地方为空的堆栈信息。 |
-XX:MinHeapFreeRatio | JVM堆最小空闲比率 | -XX:MinHeapFreeRatio=30 | 默认值40,当堆空间的空闲内存小于这个数值时,jvm便会扩展堆空间 |
-XX:MaxHeapFreeRatio | 设置堆空间的最大空间比例 | -XX:MaxHeapFreeRatio=50 | 默认值80,当堆空间的空闲内存大于这个数值时,jvm便会缩小堆空间 |
-XX:CICompilerCount | 最大并行编译器线程数 | -XX:CICompilerCount=3 | |
-XX:ActiveProcessorCount | 确定可用处理器的数量 | -XX:ActiveProcessorCount=4 | 覆盖VM用于计算其用于各种操作 (例如GC和ForkJoinPool) 的线程池大小的CPU数量 在docker容器中运行多个Java进程时, 此标志对于分区CPU资源很有用 |
-XX:+PreserveFramePointer | 精准的获取栈结构 | 火焰图相关,会导致一定的性能损耗 | |
-XX:+PrintGC | 垃圾回收时信息打印 | 与-verbose:gc功能一致 -verbose:gc 是稳定版本的参数;-XX:+PrintGC,由于是 -XX 开头可能在未来版本删除非稳定 | |
-XX:+PrintGCDetails | 输出详细的GC收集日志的信息 | ||
-XX:+PrintGCDateStamps | 输出GC的时间戳 | 以日期的形式,如 2013-05-04T21:53:59.234+0800 | |
-XX:+UseGCLogFileRotation | 实现 GC 日志轮转 | -XX:+UseGCLogFileRotation | 当日志文件大小增加到 32MB,JVM 会进行 GC 日志轮转生成最多5个文件,扩展名分别为 gc.log.0、gc.log.1、gc.log.2、gc.log.3和 gc.log.4。 如果应用不断产生更多的 GC 日志,gc.log.0中的旧日志内容会被删除,新产生的 GC 事件将写入 gc.log.0。 这意味着日志内容完整性早到破坏,即无法看到所有 GC 事件。 |
-XX:NumberOfGCLogFiles | 日志文件轮转的文件个数 | -XX:NumberOfGCLogFiles=5 | |
-XX:GCLogFileSize | 日志文件的最大存储量 | -XX:GCLogFileSize=32M | |
-XX:+HeapDumpOnOutOfMemoryError | 堆内存空间溢出时输出堆的内存快照 | -XX:HeapDumpPath=目录时,参数表示生成DUMP文件的路径。默认为:java__heapDump.hprof。 -XX:HeapDumpPath=文件时,形如-XX:HeapDumpPath=d:\java_heapdump.hprof。 | |
-XX:HeapDumpPath=/opt/logs/xxx | Dump目录或文件 | ||
-XX:ConcGCThreads=4 | 并发GC的线程数 | 默认值取决于JVM可用的CPU数量 ConcGCThreads=ParallelGCThreads/4四舍五入 | |
-XX:ParallelGCThreads=4 | 指定并行 GC 线程的数量 | 一般最好和 CPU 核心数量相当 当 CPU 数量小于8, ParallelGCThreads 的值等于 CPU 数量; 当 CPU 数量大于 8 时,则使用公式:ParallelGCThreads = 8 + ((N - 8) * 5/8) = 3 +((5*CPU)/ 8) | |
-XX:NewSize | 设置年轻代最小空间大小 | ||
-XX:MaxNewSize | 设置年轻代最大空间大小 | ||
-XX:NewRatio | 设置年轻代和老年代的比值 | 默认值-XX:NewRatio=2,表示年轻代与老年代比值为1:2,年轻代占整个堆大小的1/3 | |
-XX:SurvivorRatio | 设置年轻代中Eden区Survivor区的容量比值 | 默认值-XX:SurvivorRatio=8,表示Eden : Survivor0 : Survivor1 = 8 : 1 : 1 | |
XX:MaxTenuringThreshold | 新生代中对象存活次数 | -XX:MaxTenuringThreshold=18 | 经过Minor GC的次数后仍然存活,就会晋升到老年代 |
参数 | 含义 | 说明 |
---|---|---|
-Djava.util.concurrent.ForkJoinPool.common.parallelism=4 | ForkJoinPool通用线程池的线程数量 | 默认值是运行时计算机的处理器数量 |
-Dport.http.server=8080 | 服务端口 | |
-Dlog.server=/opt/logs/xx | 服务日志路径 | |
-Dport.shutdown.server=8081 | ||
-Ddocbase.server=/opt/app | ||
-Dvdir.server=/myproject | ||
-Djava.security.egd=file:/dev/./urandom | ||
-Dcom.sun.management.jmxremote.authenticate=false | ||
-Dcom.sun.management.jmxremote.ssl=false | ||
-Djava.rmi.server.hostname=192.168.11.171 | ||
-Dcom.sun.management.jmxremote | ||
-Dcom.sun.management.jmxremote.port=8780 | ||
-Dcom.sun.management.jmxremote.rmi.port=8780 | ||
-Dcom.sun.management.jmxremote.local.only=false | ||
-DAPPLOGDIR=/opt/logs/100198389/applog | ||
-Djava.util.concurrent.ForkJoinPool.common.threadFactory=com.ctrip.forkjoinworkerthreadfactory.CtripForkJoinWorkerThreadFactory | ||
-Dcatalina.base=/opt/tomcat | ||
-Dcatalina.home=/opt/tomcat | ||
-Djava.io.tmpdir=/opt/tomcat/temp | ||
-Dignore.endorsed.dirs= | -Djava.endorsed.dirs指定的目录面放置的jar文件,将有覆盖系统API的功能 | |
-Djdk.tls.ephemeralDHKeySize=2048 | DH密钥大小从1024位增加到2048位 | 一种安全协议,一种确保共享KEY安全穿越不安全网络的方法 |