千家信息网

JVM和GC关键参数

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,1. JVM内存关键参数参数均在tomcat/bin/catalina.sh中设置-server:服务器模式,不配置默认是-client,一定要作为第一个参数。-Xms和-Xmx:堆的最小值和最大值。
千家信息网最后更新 2026年11月01日JVM和GC关键参数

1. JVM内存关键参数

参数均在tomcat/bin/catalina.sh中设置


-server:服务器模式,不配置默认是-client,一定要作为第一个参数。

-Xms和-Xmx:堆的最小值和最大值。线上这俩值必须一致。设置成一样,避免每次GC之后重新分配堆的大小。建议堆的最大值设置为可用内存最大值的80%(使用命令free或cat /proc/meminfo查看,实际可用物理内存=free+buffer+cache)。但是如果真的设置到了80%,服务器的内存可能会使用过高,可以调低一点。

-Xmn:设置堆内存中的年轻代大小,剩下的为年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8

-XX:NewRatio:表示年轻代与年老代的比值,去掉-Xmn这个参数后,默认使用这个参数,比值是2,也就是年轻代占1/3

-XX:SurvivorRatio:设置两个survivor区与eden区的比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10

-XX:PermSize和-XX:MaxPermSize(jdk1.7):永久代初始值,默认是物理内存的1/64,永久代最大值,默认是物理内存的1/4。建议分别设置为128、512

-XX:MetaspaceSize和-XX:MaxMetaspaceSize(jdk1.8):同上

-Xss:设定每个线程的栈大小。每个线程都有一个栈,用于保存函数调用、返回地址等,默认为1M,一般不需修改。

-XX:+AlwaysPreTouch:jvm启动的时候就分配内存,其实就是预热的效果。

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=path_address:jvm崩溃的时候会打印出堆信息


如果catalina.sh里没有设置-Xms -Xmx -Xmn等值,可以在以下页面查看,参考:https://blog.51cto.com/11009785/2396840


2. GC相关的参数

-XX:+UseConcMarkSweepGC:CMS,并发收集器(针对年老代)

-XX:CMSInitiatingOccupancyFraction=75和-XX:+UseCMSInitiatingOccupancyOnly一起使用,设定CMS在对内存占用率达到75%的时候开始GC(控制频率,减少时常),第二个参数就是说要用前面设定的值。默认这个值是 -1,使用以下命令,可以查看设置的值,其中2713改为java的pid(通过ps -ef | grep java查看)

jinfo -flag CMSInitiatingOccupancyFraction 2713

然而,请记住大多数情况下,JVM比我们自己能作出更好的垃圾收集决策。因此,只有当我们充足的理由(比如测试)并且对应用程序产生的对象的生命周期有深刻的认知时,才应该使用该标志。

-XX:+ExplicitGCInvokesConcurrent:在CMS中并行执行GC,不会暂停,提升GC效率

-XX:+ParallelRefProcEnabled和-XX:+CMSParallelInitialMarkEnabled一起使用,在CMS中并行执行,减少暂停时间

-XX:+CMSScavengeBeforeRemark:在CMS GC之前执行一次ygc(ygc针对年轻代,CMS GC针对年老代),避免CMS GC和ygc连在一起执行从而增大暂停时间

-XX:+UseCMSCompactAtFullCollection:CMS是不会整理堆碎片的,加上此参数可以对存活的对象进行整理,使memory碎片减少

-XX:CMSFullGCsBeforeCompaction=3: 多少次Full GC 后压缩old generation一次。应该是针对-XX:+UseCMSCompactAtFullCollection设置的次数。

-XX:+CMSClassUnloadingEnabled:(只有在UseConcMarkSweepGC也启用的情况下才有用)在使用CMS垃圾回收机制的时候是否启用类卸载功能。默认这个是设置为不启用的,如果你启用了CMSClassUnloadingEnabled ,垃圾回收会清理持久代,移除不再使用的classes。

-XX:+PrintGCDateStamps -verbose:gc,在log里打印GC的详细信息


一般来说,根据下面的风格设置:


更多的参数及介绍,请参考:

https://www.cnblogs.com/hongdada/p/10277782.html

参数 内存 年轻 最大 大小 时候 最大值 比值 垃圾 物理 两个 信息 只有 命令 对象 就是 建议 情况 时间 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 湖北九亚互联网络科技有限公司 互联网扶贫科技 科技互联网技术 平安科技 互联网 互联网科技博客 互联网科技公司介绍 互联网科技英文翻译 镁科技互联网资讯平台 科技大学互联网专业好不好 济南和联互联网科技有限公司 互联网校园科技培训 互联网媒体平台算高科技产业 想开互联网科技公司怎么样 中科明德北京互联网科技 工业互联网展湾科技股份有限公司 易企秀互联网科技是做什么的 福州德业互联网科技 世界互联网科技成果奖 同城互联网络科技 互联网科技产业 科技赋能下的互联网金融 融势互联网科技 科技大学互联网专业好不好 乌苏新华互联网科技做什么的 华夏恒生互联网科技013171 特约风豹互联网科技为什么扣费 半导体行业属于互联网高科技类吗 数字互联网科技有限公司 陕西彩京云互联网科技有限公司
0