更多内容,前往 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安全穿越不安全网络的方法 |