Apache RocketMQ 5.x 系统配置指南:JVM 参数与 Linux 内核调优实践
Apache RocketMQ 5.x 系统配置指南JVM 参数与 Linux 内核调优实践【免费下载链接】rocketmqApache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.项目地址: https://gitcode.com/gh_mirrors/ro/rocketmq本指南聚焦 Apache RocketMQ 5.x 的系统级配置涵盖 Broker/NameServer 等核心服务的 JVM 参数选型堆内存、直接内存、GC 策略与日志以及 Linux 内核参数调优内存水位、mmap 映射、文件描述符与 I/O 调度器。读者将掌握如何参照仓库内 os.sh 与 runbroker.sh 落地一套面向生产环境的基础配置并理解每条参数背后对应的 RocketMQ 存储与运行机制。1 JVM 选项JVM OptionsRocketMQ 的 Broker、NameServer 等 Java 服务对 GC 停顿与内存分配延迟高度敏感。官方推荐使用最新发布的 JDK 1.8 版本以下配置原则与参数均来自官方系统配置文档且与仓库内启动脚本 runbroker.sh 的实际默认值一致。1.1 堆内存固定 Xms 与 Xmx将-Xms与-Xmx设置为相同值可以防止 JVM 在运行期动态调整堆大小避免由此引入的性能抖动-server -Xms8g -Xmx8g -Xmn4g其中-Xmn4g为新生代预留 4GB。在 runbroker.sh 中Broker 启动脚本固定使用-server -Xms8g -Xmx8g而 runserver.shNameServer 等服务则默认使用-server -Xms4g -Xmx4g说明不同角色应根据负载规模独立设定堆大小。1.2 直接内存-XX:MaxDirectMemorySizeRocketMQ 的网络通信与部分 I/O 路径会使用 Direct ByteBuffer。当直接内存使用量增长到指定上限时会触发 Full GC因此需要显式设大上限-XX:MaxDirectMemorySize15g该参数同样出现在 runbroker.sh 中作为 Broker 的默认配置。1.3 堆预触达-XX:AlwaysPreTouch如果不在乎 Broker 的启动时间可以开启堆预触达让 JVM 在初始化阶段就完成每一页堆内存的物理分配避免运行时首次访问触发缺页中断-XX:AlwaysPreTouchrunbroker.sh 默认开启该选项代价是启动阶段耗时略有增加。1.4 关闭偏向锁关闭偏向锁可以减少 JVM 停顿-XX:-UseBiasedLocking该选项在 runbroker.sh 中默认启用。1.5 GC 策略JDK 1.8 下推荐 G1官方推荐在 JDK 1.8 上使用 G1 收集器并给出了经过生产环境验证的参数组合-XX:UseG1GC -XX:G1HeapRegionSize16m -XX:G1ReservePercent25 -XX:InitiatingHeapOccupancyPercent30-XX:G1HeapRegionSize16m指定 G1 Region 大小-XX:G1ReservePercent25为晋升预留 25% 的堆空间降低 Full GC 概率-XX:InitiatingHeapOccupancyPercent30堆占用率达到 30% 即触发并发标记周期。官方说明这些 GC 选项看起来略显激进但在生产环境中已被证明能提供良好的性能。从 runbroker.sh 的choose_gc_options逻辑可以看到脚本会根据运行时 JDK 大版本自动选择Java 8 以下使用 CMS 组合Java 9JAVA_MAJOR_VERSION 9则统一使用上述 G1 参数且额外附带-XX:SoftRefLRUPolicyMSPerMB0让 SoftReference 尽快回收缓解内存压力。1.6 GC 日志与暂停控制不要将-XX:MaxGCPauseMillis设置得过小否则 JVM 会倾向使用较小的新生代导致频繁 Minor GC。推荐使用滚动 GC 日志文件-XX:UseGCLogFileRotation -XX:NumberOfGCLogFiles5 -XX:GCLogFileSize30m如果磁盘写入 GC 日志会增大 Broker 延迟可将 GC 日志重定向到内存文件系统tmpfs-Xloggc:/dev/shm/mq_gc_%p.log123这一点与仓库启动脚本的工程实践完全吻合choose_gc_log_directory会优先将 GC 日志目录指向/dev/shmLinux或在 macOS 上创建 RAMDisk日志文件名带%p进程号与%t时间戳占位符并配置 5 个文件、每个 30MB 的滚动策略runbroker.sh。注意JDK 9 使用统一的-Xlog:gc*:file...语法替代旧的-Xloggc系列选项脚本已对此做了版本分支处理。2 Linux 内核参数Linux Kernel Parameters仓库的bin目录下提供了 os.sh 脚本其中列出了可用于生产环境的内核参数官方说明需在应用前做少量修改。以下是官方文档点名需要重点关注的参数。2.1 vm.extra_free_kbytes告诉内核在后台回收kswapd 触发阈值与直接回收由分配进程触发阈值之间保留额外空闲内存。RocketMQ 使用该参数避免内存分配时出现高延迟。该参数与内核版本相关。在 os.sh 中官方给出的参考值为sudo sysctl -w vm.extra_free_kbytes20000002.2 vm.min_free_kbytes若设置低于 1024KB系统在高负载下可能变得“微妙地损坏”并容易发生死锁sudo sysctl -w vm.min_free_kbytes10000002.3 vm.max_map_count该参数限制进程可拥有的内存映射区域数量。RocketMQ 通过mmap加载CommitLog与ConsumeQueue文件因此建议调高sudo sysctl -w vm.max_map_count655360从源码可以印证这一需求存储模块的 DefaultMappedFile 通过fileChannel.map(MapMode.READ_WRITE, 0, fileSize)将 CommitLog 等文件映射为MappedByteBufferBroker 运行期会维护大量文件映射映射区域上限不足将直接导致mmap失败、Broker 无法正常写入消息。2.4 vm.swappiness定义内核交换内存页的激进程度值越高越激进越低越少使用 swap。推荐设置为10以避免交换延迟sudo sysctl -w vm.swappiness10注意官方文档推荐 10而仓库内 os.sh 实际写入的是vm.swappiness1两者方向一致都强烈倾向不换出实际取值可按部署环境微调以文档建议 10 为基准。2.5 文件描述符限制RocketMQ 需要为CommitLog、ConsumeQueue等文件以及网络连接打开大量文件描述符推荐设置为655350echo ulimit -n 655350 /etc/profile echo * hard nofile 655350 /etc/security/limits.confos.sh 在写入 nofile 限制的同时还将 memlock 的 soft/hard 限制设为 unlimited并配合-XX:-UseLargePages使用。2.6 磁盘调度器deadline官方推荐deadline I/O 调度器因为它能为请求提供有保证的延迟echo deadline /sys/block/${DISK}/queue/scheduleros.sh 会先通过df -k找出磁盘设备名再写入 deadline 调度器最后回读/sys/block/$DISK/queue/scheduler验证是否生效。2.7 os.sh 中的其他生产参数除官方文档点名的参数外os.sh 还包含一组与内存脏页、NUMA 回收等相关的配套设置可一并参考注意应用前按实际内核与机器规格确认sudo sysctl -w vm.overcommit_memory1 sudo sysctl -w vm.drop_caches1 sudo sysctl -w vm.zone_reclaim_mode0 sudo sysctl -w vm.dirty_background_ratio50 sudo sysctl -w vm.dirty_ratio50 sudo sysctl -w vm.dirty_writeback_centisecs360000 sudo sysctl -w vm.page-cluster3脚本末尾还会在$HOME下创建指向/dev/shm的tmpfs软链接os.sh与前述“将 GC 日志放到内存文件系统”的策略配套。执行os.sh后脚本会回显各参数当前值便于核对是否写入成功。请勿在未评估内核版本与机器规格的情况下直接全量套用。3 参数落地与验证3.1 如何应用到启动脚本仓库的 JVM 参数通过启动脚本集中管理runbroker.sh 与 runserver.sh 均支持JAVA_OPT_EXT环境变量追加自定义参数如-Xmx、-XX:MaxDirectMemorySize等无需改动仓库文件即可覆盖默认值。此外 runbroker.sh 在检测到numactl可用时会默认以--interleaveall启动 Java或将RMQ_NUMA_NODE指定的节点用于--cpunodebind/--membind绑定配合vm.zone_reclaim_mode0减少跨 NUMA 节点访问的延迟。3.2 验证手段内核参数执行sysctl vm.max_map_count等命令查看生效值文件描述符限制用ulimit -n确认GC 日志检查/dev/shm/rmq_srv_gc_%p_%t.log是否按 5×30MB 滚动生成确认 G1 参数生效且无频繁 Full GC存储行为可通过 store 模块的测试如 MappedFileTest观察mmap读写路径配合vm.max_map_count判断是否需要继续调高。4 小结RocketMQ 5.x 的系统配置分为两层JVM 层负责堆/直接内存、GC 策略与日志Linux 内核层负责内存水位、mmap 映射上限、文件描述符与磁盘 I/O 调度。官方文档给出的推荐值-Xms8g -Xmx8g、MaxDirectMemorySize15g、G1 三件套、swappiness10、nofile655350、deadline 调度器均已落地在 runbroker.sh、runserver.sh 与 os.sh 中可作为生产部署的可靠基线内核参数存在版本相关性与机器差异性应用前应结合/proc/sys/vm/*的官方内核文档与自身规格逐项确认。【免费下载链接】rocketmqApache RocketMQ is a cloud native messaging and streaming platform, making it simple to build event-driven applications.项目地址: https://gitcode.com/gh_mirrors/ro/rocketmq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Matlab模型接入PSASP潮流计算:基于RTW生成DLL的联合仿真实现

Matlab模型接入PSASP潮流计算:基于RTW生成DLL的联合仿真实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 20:08:48 阅读更多 →
SpringBoot+Vue智慧医疗挂号系统:从数据建模到号源防超卖的完整实现

SpringBoot+Vue智慧医疗挂号系统:从数据建模到号源防超卖的完整实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 20:08:48 阅读更多 →
GitHub周刊第35周:图像生成工程化、架构可核验与AI编程CLI深度解析

GitHub周刊第35周:图像生成工程化、架构可核验与AI编程CLI深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 20:08:48 阅读更多 →

最新新闻

Page Assist:免费本地AI浏览器助手,任意网页一键呼出AI

Page Assist:免费本地AI浏览器助手,任意网页一键呼出AI

Page Assist:免费本地AI浏览器助手,任意网页一键呼出AI 【免费下载链接】page-assist Use your locally running AI models to assist you in your web browsing 项目地址: https://gitcode.com/GitHub_Trending/pa/page-assist 读一篇长文档、啃…

2026/9/20 20:58:20 阅读更多 →
基于WOW-Auctions-API的魔兽世界拍卖行数据获取与封装解析

基于WOW-Auctions-API的魔兽世界拍卖行数据获取与封装解析

简介:面向《魔兽世界》玩家与 Python 开发者的 WOW-Auctions-API,是基于暴雪开放接口的开源 Python 类库,主要解决拍卖行商品价格监控与交易决策的问题。通过设定价格阈值,它能自动抓取拍卖数据,并在商品价格跌破预期时…

2026/9/20 20:58:20 阅读更多 →
使用本地构建的 apphost 与 .NET 根目录进行运行时开发调试

使用本地构建的 apphost 与 .NET 根目录进行运行时开发调试

语言运行时标准库JIT编译编译器 【免费下载链接】runtime .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. 项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime 点击查看 免费下载 导读 在 .NET 运行时仓库&#xff0…

2026/9/20 20:58:20 阅读更多 →
百度地图POI与OSM边界数据结合:学校地理数据获取实战

百度地图POI与OSM边界数据结合:学校地理数据获取实战

做地理数据的同学应该都遇到过这种需求:想统计某个区域里的学校分布,或者想给地图上的学校加个轮廓范围,结果发现网上流传的所谓“POI数据包”要么是几年前的旧货,要么来源不明带着一股灰色气息。说句实在话,POI点数据…

2026/9/20 20:58:20 阅读更多 →
Mocha 官方文档站(Astro Starlight)本地构建、预览与依赖升级实战指南

Mocha 官方文档站(Astro Starlight)本地构建、预览与依赖升级实战指南

Mocha 官方文档站(Astro Starlight)本地构建、预览与依赖升级实战指南 【免费下载链接】mocha ☕️ Classic, reliable, trusted test framework for Node.js and the browser 项目地址: https://gitcode.com/gh_mirrors/mo/mocha Mocha 的官方文…

2026/9/20 20:58:20 阅读更多 →
gbrain Doctor 自动修复与评分体系改进:从误报噪声到可观测健康基线

gbrain Doctor 自动修复与评分体系改进:从误报噪声到可观测健康基线

gbrain Doctor 自动修复与评分体系改进:从误报噪声到可观测健康基线 【免费下载链接】gbrain Garrys Opinionated OpenClaw/Hermes Agent Brain 项目地址: https://gitcode.com/gh_mirrors/gb/gbrain gbrain doctor 是 GBrain 大脑健康检查的核心命令&#x…

2026/9/20 20:57:19 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →