RocketMQ-ONS 内存占用过大问题处理

news2024/11/15 17:30:52

RocketMQ-ONS 内存占用过大问题处理

  • 1、问题环境描述
  • 2、问题现像描述
  • 3、问题分析
    • 3.1、问题定位阶段1(确认内存占用原因)
    • 3.2、问题定位阶段2(缓存参数配置无效问题)
    • 3.3、问题定位阶段2(分析占用原因)
  • 4、解决方案
  • 5、总结

1、问题环境描述

  • 运行在聚石塔环境下(K8S)
  • RocketMQ使用阿里云4.0系列版本的ONS
  • 客户端版本号为
            <dependency>
                <groupId>com.aliyun.openservices</groupId>
                <artifactId>ons-client</artifactId>
                <version>1.8.4.Final</version>
            </dependency>
    
  • 需要订阅8个topic,其中4个普通主题,4个顺序主题
  • 启动时8个主题剩余消费消息有50w+

2、问题现像描述

  • 服务启动一段时间后接口请求超时
  • 链路追踪服务报消息消费超时

3、问题分析

3.1、问题定位阶段1(确认内存占用原因)

  • 查看服务监控发现内存占用过大(这个是服务升级后的,达到了7个G)
    在这里插入图片描述
  • 通过 arthas-boot 的 dashboard 命令看到内存集中在老年代无法回收
  • 通过rocketmq控制台的仪表盘查看到处理中的消息达到了10w的数量
    在这里插入图片描述
  • 处理中的消息数量过大意味着消息已经被消费端接收但是还未处理,即未回执ACK消息,所以基本肯定是服务从RocketMQ拉取过多消息到本地引起的内存占用过大导致没有资源响应接口请求

3.2、问题定位阶段2(缓存参数配置无效问题)

  • ONS有两个参数用于控制缓存数据
    • maxCachedMessageAmount
      • Consumer允许在客户端中缓存的最大消息数量,默认值为5000,设置过大可能会引起客户端OOM,取值范围为[100, 50000]
        考虑到批量拉取,实际最大缓存量会少量超过限定值
        该限制在客户端级别生效,限定额会平均分配到订阅的Topic上,比如限制为1000条,订阅2个Topic,每个Topic将限制缓存500条
    • maxCachedMessageSizeInMiB
      • Consumer允许在客户端中缓存的最大消息容量,默认值为512 MiB,设置过大可能会引起客户端OOM,取值范围为[16, 2048]
        考虑到批量拉取,实际最大缓存量会少量超过限定值
        该限制在客户端级别生效,限定额会平均分配到订阅的Topic上,比如限制为1000MiB,订阅2个Topic,每个Topic将限制缓存500MiB
  • 但是配置之后并没有效果,查看源码发现参数值会写入到 DefaultMQPushConsumer 的 pullThresholdForTopic 和 pullThresholdSizeForTopic 属性上,同时这里也检查并限定了参数的最大值和最小值
    在这里插入图片描述
  • 而这两个参数会在 com.aliyun.openservices.shade.com.alibaba.rocketmq.client.impl.consumer.RebalancePushImpl 类的 messageQueueChanged 方法内触发写入到对应的 pullThresholdForQueue 和 pullThresholdSizeForQueue 属性上才能生效
    在这里插入图片描述
  • 但是实际上调用这个方法之前都会经过 updateProcessQueueTableInRebalance 方法判断才会调用,这在相对稳定的线上环境该方法会始终返回false,所以导致配置的参数没有生效
    在这里插入图片描述

3.3、问题定位阶段2(分析占用原因)

  • 按理来说就算参数未生效,但是默认值最大也才100Mb,为什么会膨胀到几个G呢

  • 其实是参数配置的维度是整个消费端,而默认值是 topic 下的 queue 级别,如果 queue 数量很大,是不是有可能撑爆整个JVM

  • 我们知道开源rocketmq 在创建 topic 时默认的 queue 是 16 个,但是ONS却是有几百个(下面截图是4个topic的queue数量),所以最差情况下需要占用几百个G
    在这里插入图片描述

  • 到这里也就能解释为什么内存会占用这么大的原因了

4、解决方案

  • 这个问题在 1.8.8 版本中修复过了,所以我们直接升级客户端到最新版本就行了,点击查看ONS客户端具体版本变更
        <dependency>
            <groupId>com.aliyun.openservices</groupId>
            <artifactId>ons-client</artifactId>
            <!--2023-02-06 发布-->
            <version>1.8.8.8.Final</version>
        </dependency>

在这里插入图片描述

5、总结

  • 已知ONS一个topic下可能会有300+的queue,订阅8个topic加上重试队列最终总的queue会达到3000+的一个数量,而 pullThresholdSizeForQueue 最小需要1Mb,所以最终还是需要3个G的内存,不过我们可以通过部署3台服务来分摊一下
  • 其实如果业务数据量不是很多且不是很活跃的情况下,部分queue是会被回收的,所以还是需要结合实际情况配置 pullThresholdForQueue 和 pullThresholdSizeForQueue
  • 还需要注意的是 ConsumeMessageBatchMaxSize 参数,批量拉取消息数量,即假设当前 pullThresholdForQueue 限制为10,而已经使用了 5,如果下一次批量拉去的数量大于5,那最终存储的数量就会突破10,内存也是

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解文件操作和 IO

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 如何优雅的活着&#xff0c;是我找寻的方向 目录 一、认识文件二、文件路径三、文件系统操作四、文件内容的操作读写 - 数据流4.1 InputStream 概述4.2 OutputStream 概…

快讯 | ALVA Systems 参加 Open Bosch 首届 Demo Day 活动

4 月 27 日&#xff0c;博世&#xff08;中国&#xff09;投资有限公司&#xff08;下以“博世”简称&#xff09;在上海总部举办 Open Bosch 第一届 Demo Day 活动&#xff0c;展示与初创伙伴的合作项目成果&#xff0c;宣传合作理念&#xff0c;为初创伙伴搭建参观交流的开放…

【Matter】esp-matter开发环境搭建

文章目录 esp-matter开发环境搭建前提准备1.Ubuntu22.04&#xff08;内存不小于80G&#xff09;2.网络环境 esp-idf 开发环境搭建1.Problem1 solution2.Problem2 solution esp-matter开发环境搭建 esp-matter开发环境搭建 前提准备 1.Ubuntu22.04&#xff08;内存不小于80G&am…

vs可视化界面使用git变基

天天都在使用git&#xff0c;听说过变基这个名词&#xff0c;但是并没有实操过变基&#xff0c;正好今天有个同事说起一件事情&#xff1a;提交代码的时候有太多的自动合并&#xff0c;如果需要回退版本&#xff0c;操作起来很困难&#xff0c;理想状态下&#xff0c;应该就只有…

部门来了个软件测试,听说是00后,上来一顿操作给我看呆了...

前段时间公司新来了个同事&#xff0c;听说大学是学的广告专业&#xff0c;因为喜欢IT行业就找了个培训班&#xff0c;后来在一家小公司干了三年&#xff0c;现在跳槽来我们公司。来了之后把现有项目的性能优化了一遍&#xff0c;服务器缩减一半&#xff0c;性能反而提升4倍!给…

【STM32CubeMX】F103串口通信

前言 本文记录下我学习STM32CubeMX时的流程&#xff0c;系统板是基于STM32F103C6T6&#xff0c;方便以后回忆。本章记录串口通信。这里居然有玄学问题&#xff0c;给我整了好久&#xff0c;头都大了。可能也是我能力有限才有的吧&#xff0c;泪目。 目录 串口通信 串口通信 …

SPSS如何进行方差分析之案例实训?

文章目录 0.引言1.单因素方差分析2.多因素方差分析3.协方差分析4.多因变量方差分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对…

Java版工程项目管理系统平台+java版企业工程系统源码+助力工程企业实现数字化管理

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…

repartition和partitionBy的区别

前言 旁边的实习生一脸困惑&#xff1a;我把一个dataset的数据往某个文件夹或hive表中写的时候可以用partitionBy对数据进行分区&#xff0c;可是repartition顾名思义也好像与分区有关&#xff0c;这两个究竟有啥区别&#xff1f;我该如何使用&#xff1f; API解释 repartit…

ChatGPT能承担哪些工作?

ChatGPT拥有高效的自然语言处理能力&#xff0c;它最容易取代的领域可能是&#xff1a;文本分类、聊天机器人、文本生成、问答系统、文字识别和自动翻译方面。最容易取代的职业可能是&#xff1a;客服人员、技术类、媒体类、教师、法律类、金融类。使相关的人员在工作生活中更加…

公务机包机攻略,揭开公务机神秘面纱

随着经济的高速发展&#xff0c;在如今的商业环境中&#xff0c;时间就是金钱&#xff0c;不少商务人士倾向于公务机包机出行&#xff0c;主要在于乘坐公务机一天之内可以到达多个地点&#xff0c;节省出许多额外的时间。并且和大型民航航班相比&#xff0c;公务机的运行成本更…

【react全家桶学习】react组件中的ref属性(详)

不管在Vue中还是React&#xff0c;如果我们想使用一个元素的DOM&#xff0c;不需要通过JS中操纵DOM的方法&#xff0c;它们提供了一个专属的API就是ref。 而Vue中的ref可能比较简单&#xff08;直接this.$refs.xxx就可以&#xff09;&#xff0c;这一篇主要讲一下如何在React中…

第04讲:Eureka

一、单机版 1.1、Server端开发 1.1.1、创建项目cloud-eureka-server7001 1.1.2、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLS…

CNN实现手写数字识别(Pytorch)

CNN结构 CNN&#xff08;卷积神经网络&#xff09;主要包括卷积层、池化层和全连接层。输入数据经过多个卷积层和池化层提取图片信息后&#xff0c;最后经过若干个全连接层获得最终的输出。 CNN的实现主要包括以下步骤&#xff1a; 数据加载与预处理模型搭建定义损失函数、优…

SDN — OpenvSwitch 软硬件融合加速方案

目录 文章目录 目录OVS-DPDKOvS-DPDK v.s. SR-IOV东西向流量南北向流量 / 跨服务器东西流量 OVS Hardware OffloadOVS-DPDK Hardware OffloadDPDK Hardware offloadOvS-DPDK Hardware offloadOvS-DPDK Hardware offload with vDPA OVS-DPDK 上图中的深色模块就是引入 DPDK 的相…

Sublime软件及html相关软件安装

Sublime软件及html相关软件安装 下载Sublime编译器并安装下载链接: [https://www.sublimetext.com/3](https://www.sublimetext.com/3)安装emmet自动补全插件 验证 下载Sublime编译器并安装 下载链接: https://www.sublimetext.com/3 安装emmet自动补全插件 第一步&#xff1…

css分享 | 常用按钮效果记录(关注追加)

今日分享几个css样式&#xff0c;在日常业务中&#xff0c;我们会追求更友好的交互体验&#xff0c;所以记录一些业务中常用的按钮样式&#xff0c;下次遇到可以拿来即用。 目录 1.按钮水波纹点击效果 2.流光波光闪烁效果 3.按钮点击立体效果 4.按钮悬停出现箭头效果 1.按钮…

玩客云刷armbian证书错误server certificate verification failed

文章目录 前言大概操作&#xff1a;1、换http源&#xff08;感觉https应该也行&#xff09;2、修改armbian.list3、证书认证4、更新软件源、索引5、安装证书、更新证书6、禁用ssl7、手动添加网站证书&#xff08;好像失败了&#xff09;8、安装debian软件包公钥&#xff08;好像…

uni push2.0使用

uni push2.0配置 需要开通uniCloud服务&#xff08;推荐阿里云&#xff09; 生成证书&#xff1a;安卓&#xff08;https://ask.dcloud.net.cn/article/68&#xff09;&#xff0c;ios&#xff08;https://docs.getui.com/getui/mobile/ios/apns/&#xff09; 进入开发者中心…

C++ 1.基础语法

1.using namespace std; 建议a&#xff1a;项目中尽量不要用上述语句。b&#xff1a;日常练习中使用。c&#xff1a;项目中指定名空间访问展开常用。 这个语句表示标准库的东西都放到std&#xff0c;为了解决自己定义的名字和库名发生冲突。如果定义和库名冲突的名字&#xf…