JVM 参数及调优
创始人
2024-02-02 09:22:23

更多内容,前往 IT-BLOG-CN

一、JVM 启动参数规则

【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/

二、X参数

参数含义默认值示例说明
-Xms初始堆大小物理内存的1/64(<1GB)-Xms7372m
-Xmx最大堆大小物理内存的1/4(<1GB)-Xmx12288m尽量设置的跟-Xms一样,防止因为内存不断增加后突然收缩带来的性能影响
-Xmn新生代大小-Xmn256M这个参数影响性能,尽量设置小一点
-Xss指定线程栈的大小-Xss256k一般来说,WEBX框架下的应用需要256k
-Xloggcgc日志文件路径-Xloggc:/usr/local/gc_%t_%p.log将gc信息打印到指定的文件中,通过时间戳生成文件名

三、XX参数

参数含义示例说明
-XX:MetaspaceSize设置元空间大小-XX:MetaspaceSize=128m永久代被元空间取代,同时元空间不像永久代一样受制于堆内存。
元空间是基于操作系统内存的,理论上讲,可以一直扩展内存直到操作系统的极限,所以设置元空间大小时,建议加上-XX:MaxMetaspaceSize参数,给个范围限制,和-XX:MetaspaceSize参数值一样。
一般设置成256M即可,避免元空间占用的内存一直增长。
-XX:MaxMetaspaceSize设置元空间最大大小-XX:MaxMetaspaceSize=256m
-XX:MaxGCPauseMillisGC最大的停顿毫秒数-XX:MaxGCPauseMillis=200默认情况下,VM没有暂停时间目标值。参数应谨慎使用,太小的值将会导致更高频率的GC
-XX:+UseG1GC使用G1收集器
-XX:-OmitStackTraceInFastThrow关闭“省略异常栈信息从而快速抛出”默认打开必须关闭,否则会导致异常信息打印不全。
例如:只有java.lang.NullPointerException信息,没有完整的具体信息,展示什么地方为空的堆栈信息。
-XX:MinHeapFreeRatioJVM堆最小空闲比率-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/xxxDump目录或文件
-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=4ForkJoinPool通用线程池的线程数量默认值是运行时计算机的处理器数量
-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=2048DH密钥大小从1024位增加到2048位一种安全协议,一种确保共享KEY安全穿越不安全网络的方法

相关内容

热门资讯

脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...