生产环境 JVM 参数配置

参数配置

废话不多说,直接给出参数配置,根据自己项目适当调整即可使用

ruby 复制代码
java -Xms4g -Xmx4g -Xmn1512m -server -Xss256k -XX:MetaspaceSize=256M  -XX:MaxMetaspaceSize=256m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/log/gclog/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/jvmdump/ -XX:+UseConcMarkSweepGC -XX:+UseParNewGC  -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:+TieredCompilation  -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -jar xxx.jar

此参数在以前笔者负责的一个微服务项目中运行了数年,单机并发1000+,CMS GC大概是8天左右一次

配置说明

这些JVM配置参数用于调整Java虚拟机的性能和行为。下面是对这些参数的解读:

  • -Xms4g: 设置JVM的初始堆大小为4GB。当JVM启动时,它会立即分配这么多的堆内存。

  • -Xmx4g: 设置JVM最大可用的堆内存为4GB。无论何时,JVM分配给对象的内存总量不会超过这个值。

  • -Xmn1512m: 设置年轻代大小为1512MB。年轻代是堆内存的一个子区域,用于存放新生成的对象。

  • -server: 选择server模式的JVM,针对服务器端应用进行了优化,相对于client模式,拥有更高的优化级别和更长的启动时间。

  • -Xss256k: 设置每个线程堆栈的大小为256KB。线程堆栈大小影响了线程可以调用的深度,以及能够创建的线程数量。

  • -XX:MetaspaceSize=256M: 设置元空间的初始大小为256MB。元空间用于存储类的元数据,它在Java 8中取代了永久代。

  • -XX:MaxMetaspaceSize=256m: 设置元空间的最大大小为256MB。这限制了类的元数据可用的最大内存。

  • -XX:+PrintGCDetails: 启用详细的垃圾回收日志。

  • -XX:+PrintGCDateStamps: 在垃圾回收日志中包含日期戳,以便于分析。

  • -Xloggc:/data/log/gclog/gc.log: 指定垃圾回收日志的文件路径。

  • -XX:+HeapDumpOnOutOfMemoryError: 在发生内存溢出异常时,自动进行堆转储。

  • -XX:HeapDumpPath=/data/log/jvmdump/: 指定堆转储文件的存储路径。

  • -XX:+UseConcMarkSweepGC: 启用CMS(并发标记清除)垃圾收集器。

  • -XX:+UseParNewGC: 使用ParNew(并行新生代)垃圾收集器。这通常与-XX:+UseConcMarkSweepGC一起使用,作为老年代垃圾收集器的补充。

  • -XX:CMSInitiatingOccupancyFraction=75: 设置堆使用到75%时,就开始进行CMS垃圾回收。

  • -XX:+UseCMSInitiatingOccupancyOnly: 只在达到-XX:CMSInitiatingOccupancyFraction指定的占用率时才启动CMS收集,不基于运行时间。

  • -XX:+UseCMSCompactAtFullCollection: 在进行完全垃圾收集时启用CMS的压缩步骤。

  • -XX:CMSFullGCsBeforeCompaction=0: 设置在执行多少次CMS完全垃圾回收后进行一次压缩。

  • -XX:+CMSClassUnloadingEnabled: 允许CMS收集器卸载无用的类。

  • -XX:+TieredCompilation: 启用分层编译,这允许JVM在执行Java代码时使用多个编译级别,以提高性能。

  • -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses: 允许显式垃圾回收调用(如System.gc())触发并发收集和类的卸载,而不是导致完全的垃圾收集。

这些参数的组合是为了让JVM在服务器环境中以较大的堆内存启动,并具有高吞吐量的垃圾回收策略。同时它们也确保了在OOM错误发生时能够获取到堆的快照,这有助于之后分析和解决内存问题。

相关推荐
绝无仅有18 分钟前
mysql性能优化实战与总结
后端·面试·github
用户83562907805130 分钟前
从手动编辑到代码生成:Python 助你高效创建 Word 文档
后端·python
德育处主任36 分钟前
玩转 Strands:AI Agent 开发,原来可以这么简单!
后端·aigc
Undoom42 分钟前
大模型选型“炼狱”与终结:一份来自普通开发者的AI Ping深度评测报告
后端
用户40993225021243 分钟前
FastAPI的CI流水线怎么自动测端点,还能让Allure报告美到犯规?
后端·ai编程·trae
双向331 小时前
Docker 镜像瘦身实战:从 1.2GB 压缩到 200MB 的优化过程
后端
Cyan_RA91 小时前
计算机网络面试题 — TCP连接如何确保可靠性?
前端·后端·面试
BingoGo1 小时前
PHP-FPM 深度调优指南 告别 502 错误,让你的 PHP 应用飞起来
后端·php
CoovallyAIHub1 小时前
微软发布 Visual Studio 2026 Insider:AI深度集成,性能大提升,让开发效率倍增(附下载地址)
后端·编程语言·visual studio
汤姆yu1 小时前
基于springboot的毕业旅游一站式定制系统
spring boot·后端·旅游