当前位置: 首页 > backend >正文

大内存生产环境tomcat-jvm配置实践

话不多讲,奉上代码,分享经验,交流提高!

64G物理内存,8核CPU生产环境tomcat-jvm配置如下:

JAVA_OPTS=-server -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=2G 
-XX:+UseG1GC -Xms48G -Xmx48G -XX:MaxGCPauseMillis=200 
-XX:G1HeapRegionSize=8M -XX:InitiatingHeapOccupancyPercent=45 
-XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow 
-Doracle.jdbc.useNio=false -Dsun.zip.disableMemoryMapping=true 
-Dorg.apache.el.parser.COERCE_TO_ZERO=true 
-Djgroups.bind_addr=0.0.0.0

配置参数逐项说明

编号配置参数参数含义及备注说明
1-server

启用JVM的“服务器模式”优化,针对长时间运行的应用进行性能优化(如更高的吞吐量、更积极的即时编译)。适用于生产环境中的服务端应用,一定要作为第一个参数。

2-XX:MaxMetaspaceSize=4G​​​​设置Metaspace(元数据区,替代永久代)的最大大小为4GB,防止类元数据无限制增长导致内存溢出。​​注​​:Metaspace存放类定义、方法元数据等信息,默认无上限,需监控避免泄漏。
3

-XX:ReservedCodeCacheSize=2G

设置JIT编译后的本地代码缓存区大小为2GB,避免大型应用因代码缓存不足导致性能下降。注​​:代码缓存满时,JIT可能停止编译,影响性能。
4-XX:+UseG1GC​​启用G1(Garbage-First)垃圾收集器,适合大堆内存(如48G)和低延迟场景。​特点​​:分区域回收,优先处理垃圾最多的区域,减少停顿时间。
5-Xms48G -Xmx48G​​​​设置JVM堆内存的初始值(Xms)和最大值(Xmx)均为48GB,避免堆动态扩容带来的性能波动。生产建议​​:通常建议两者设为相等,避免堆大小调整导致GC频繁。
6-XX:MaxGCPauseMillis=200​​​​设定G1垃圾收集器的目标最大停顿时间为200毫秒,JVM会尽量调整GC策略以满足该目标。权衡​​:过低的设置可能导致更频繁的GC,影响吞吐量。
7-XX:G1HeapRegionSize=8M​​​​设置G1垃圾收集器的内存区域(Region)大小为8MB,较大的Region可能减少内存碎片。
​​建议​​:通常根据堆大小自动计算,显式设置需结合应用特性。
8-XX:InitiatingHeapOccupancyPercent=45​​​​当堆内存使用率达到45%时,启动G1的并发标记周期(Concurrent GC)。
​​目的​​:尽早回收垃圾,避免堆占用过高时触发Full GC。
9-XX:+HeapDumpOnOutOfMemoryError​​​​在发生内存溢出(OOM)时自动生成堆转储文件(java_pid<pid>.hprof),用于事后分析内存泄漏。​​文件位置​​:默认在JVM工作目录,可通过-XX:HeapDumpPath指定路径。
10-XX:-OmitStackTraceInFastThrow​​​​禁用JVM对频繁抛出异常的堆栈轨迹优化,确保所有异常都有完整的堆栈信息。​​背景​​:JVM默认会省略高频异常(如NullPointerException)的堆栈,可能影响调试。
11-Doracle.jdbc.useNio=false​​禁用Oracle JDBC驱动的NIO(非阻塞IO)模式,强制使用传统IO。​​适用场景​​:某些旧版本驱动或网络环境下NIO可能导致问题。
12-Dsun.zip.disableMemoryMapping=true​​​​禁止使用内存映射文件处理ZIP/JAR,改用流式读取,避免内存映射导致虚拟内存地址耗尽。​​典型问题​​:处理大量JAR文件时可能出现的OutOfMemoryError: Map failed。
13-Dorg.apache.el.parser.COERCE_TO_ZERO=true​​​​强制将空字符串转换为数值0(例如,表单提交的空字段解析为0),避免EL表达式类型转换异常。​​示例​​:${param.value} 若为空会返回0而非报错。
14-Djgroups.bind_addr=0.0.0.0​​设置JGroups(集群通信库)绑定所有可用网络接口(0.0.0.0),确保集群节点间正常通信。​​注​​:需确保防火墙开放相关端口。

http://www.xdnf.cn/news/2018.html

相关文章:

  • 同一页面下动态加载内容的两种方式:AJAX与iframe
  • Git 进阶使用指南
  • 【深度强化学习 DRL 快速实践】策略梯度算法 (PG)
  • 图论---染色法(判断是否为二分图)
  • PH热榜 | 2025-04-25
  • 【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)
  • Feign接口调用失败降级机制
  • 力扣DAY68 | 热100 | 寻找两个正序数组的中位数
  • 【数据可视化-33】病毒式社交媒体潮流与用户参与度可视化分析
  • 入侵检测系统(IDS)与入侵防御系统(IPS):功能对比与部署实践
  • QT开发技术【QT实现桌面右下角消息】
  • 通过模仿学习实现机器人灵巧操作:综述(上)
  • 使用 AutoGen 与 Elasticsearch
  • 6.ArkUI Row的介绍和使用
  • 笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
  • 计算机视觉各类任务评价指标详解
  • 8. 深入Spring AI:自定义Advisor
  • 反爬策略应对指南:淘宝 API 商品数据采集的 IP 代理与请求伪装技术
  • OceanBase 复合索引指南
  • 项目maven版本不一致 导致无法下载
  • 人工智能与机器学习:Python从零实现性回归模型
  • 从“能耗大户”到“节能标杆”:安科瑞助力污水处理厂绿色转型
  • 告别进度失控:用燃尽图补上甘特图的监控盲区
  • Windows server:
  • [OS_8] 终端和 UNIX Shell | 会话和进程组 | sigaction | dash
  • 多模态大语言模型(MLLM)- kimi-vl technical report论文阅读
  • 航电系统之自适应航电修复机制篇
  • Flowable7.x学习笔记(十四)查看部署流程Bpmn2.0-xml
  • TestBrain开源程序是一款集使用AI(如deepseek)大模型自动生成测试用例、和测试用例评审、RAG知识库管理的web平台系统
  • 解读《地方标准制定负面清单》与安徽标准复审新规