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

《RocketMQ实战与进阶》13 RocketMQ 集群踩坑记

集群节点进程神秘消失现象描述接到告警和运维反馈一个 RocketMQ 的节点不见了。此类现象在以前从未发生过消失肯定有原因开始查找日志从集群的 broker.log、stats.log、storeerror.log、store.log、watermark.log 到系统的 message 日志没发现错误日志。集群流量出入在正常水位、CPU 使用率、CPU Load、磁盘 IO、内存、带宽等无明显变化。原因分析继续查原因最终通过 history 查看了历史运维操作。发现运维同学在启动 Broker 时没有在后台启动而是在当前 session 中直接启动了。sh bin/mqbroker -c conf/broker-a.conf问题即出现在此命令当 session 过期时 Broker 节点也就退出了。解决方法标准化运维操作对运维的每次操作进行评审将标准化的操作实现自动化运维就更好了。正确启动 Broker 方式nohup sh bin/mqbroker -c conf/broker-a.conf Master 节点 CPU 莫名飙高现象描述RocketMQ 主节点 CPU 频繁飙高后回落业务发送超时严重由于两个从节点部署在同一个机器上从节点还出现了直接挂掉的情况。主节点 CPU 毛刺截图从节点 CPU 毛刺截图说明中间缺失部分为掉线没有采集到的情况。系统错误日志一2020-03-16T17:56:07.50571508:00 VECS0xxxx kernel: [] ? __alloc_pages_nodemask0x7e1/0x960 2020-03-16T17:56:07.50571708:00 VECS0xxxx kernel: java: page allocation failure. order:0, mode:0x20 2020-03-16T17:56:07.50571908:00 VECS0xxxx kernel: Pid: 12845, comm: java Not tainted 2.6.32-754.17.1.el6.x86_64 #1 2020-03-16T17:56:07.50572108:00 VECS0xxxx kernel: Call Trace: 2020-03-16T17:56:07.50572408:00 VECS0xxxx kernel: [] ? __alloc_pages_nodemask0x7e1/0x960 2020-03-16T17:56:07.50572608:00 VECS0xxxx kernel: [] ? dev_queue_xmit0xd0/0x360 2020-03-16T17:56:07.50572908:00 VECS0xxxx kernel: [] ? ip_finish_output0x192/0x380系统错误日志二30 2020-03-27T10:35:28.76990008:00 VECSxxxx kernel: INFO: task AliYunDunUpdate:29054 blocked for more than 120 seconds. 31 2020-03-27T10:35:28.76993208:00 VECSxxxx kernel: Not tainted 2.6.32-754.17.1.el6.x86_64 #1 32 2020-03-27T10:35:28.77165008:00 VECS0xxxx kernel: echo 0 /proc/sys/kernel/hung_task_timeout_secs disables this message. 33 2020-03-27T10:35:28.77463108:00 VECS0xxxx kernel: AliYunDunUpda D ffffffff815592fb 0 29054 1 0x10000080 34 2020-03-27T10:35:28.77750008:00 VECS0xxxx kernel: ffff8803ef75baa0 0000000000000082 ffff8803ef75ba68 ffff8803ef75ba64说明系统日志显示错误“page allocation failure”和“blocked for more than 120 second”错误日志目录 /var/log/messages。GC 日志2020-03-16T17:49:13.7850800: 13484510.599: Total time for which application threads were stopped: 0.0072354 seconds, Stopping threads took: 0.0001536 seconds 2020-03-16T18:01:23.1490800: 13485239.963: [GC pause (G1 Evacuation Pause) (young) 13485239.965: [G1Ergonomics (CSet Construction) start choosing CSet, _pending_cards: 7738, predicted base time: 5.74 ms, remaining time: 194.26 ms, target pause time: 200.00 ms] 13485239.965: [G1Ergonomics (CSet Construction) add young regions to CSet, eden: 255 regions, survivors: 1 regions, predicted young region time: 0.52 ms] 13485239.965: [G1Ergonomics (CSet Construction) finish choosing CSet, eden: 255 regions, survivors: 1 regions, old: 0 regions, predicted pause time: 6.26 ms, target pause time: 200.00 ms] , 0.0090963 secs] [Parallel Time: 2.3 ms, GC Workers: 23] [GC Worker Start (ms): Min: 13485239965.1, Avg: 13485239965.4, Max: 13485239965.7, Diff: 0.6] [Ext Root Scanning (ms): Min: 0.0, Avg: 0.3, Max: 0.6, Diff: 0.6, Sum: 8.0] [Update RS (ms): Min: 0.1, Avg: 0.3, Max: 0.6, Diff: 0.5, Sum: 7.8] [Processed Buffers: Min: 2, Avg: 5.7, Max: 11, Diff: 9, Sum: 131] [Scan RS (ms): Min: 0.0, Avg: 0.0, Max: 0.1, Diff: 0.1, Sum: 0.8] [Code Root Scanning (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.3] [Object Copy (ms): Min: 0.2, Avg: 0.5, Max: 0.7, Diff: 0.4, Sum: 11.7] [Termination (ms): Min: 0.0, Avg: 0.0, Max: 0.0, Diff: 0.0, Sum: 0.3] [Termination Attempts: Min: 1, Avg: 1.0, Max: 1, Diff: 0, Sum: 23] [GC Worker Other (ms): Min: 0.0, Avg: 0.2, Max: 0.3, Diff: 0.3, Sum: 3.6] [GC Worker Total (ms): Min: 1.0, Avg: 1.4, Max: 1.9, Diff: 0.8, Sum: 32.6] [GC Worker End (ms): Min: 13485239966.7, Avg: 13485239966.9, Max: 13485239967.0, Diff: 0.3] [Code Root Fixup: 0.0 ms] [Code Root Purge: 0.0 ms] [Clear CT: 0.9 ms] [Other: 5.9 ms] [Choose CSet: 0.0 ms] [Ref Proc: 1.9 ms] [Ref Enq: 0.0 ms] [Redirty Cards: 1.0 ms] [Humongous Register: 0.0 ms] [Humongous Reclaim: 0.0 ms] [Free CSet: 0.2 ms] [Eden: 4080.0M(4080.0M)-0.0B(4080.0M) Survivors: 16.0M-16.0M Heap: 4176.5M(8192.0M)-96.5M(8192.0M)] [Times: user0.05 sys0.00, real0.01 secs]说明GC 日志正常。Broker 错误日志2020-03-16 17:55:15 ERROR BrokerControllerScheduledThread1 - SyncTopicConfig Exception, x.x.x.x:10911 org.apache.rocketmq.remoting.exception.RemotingTimeoutException: wait response on the channel timeout, 3000(ms) at org.apache.rocketmq.remoting.netty.NettyRemotingAbstract.invokeSyncImpl(NettyRemotingAbstract.java:427) ~[rocketmq-remoting-4.5.2.jar:4.5.2] at org.apache.rocketmq.remoting.netty.NettyRemotingClient.invokeSync(NettyRemotingClient.java:375) ~[rocketmq-remoting-4.5.2.jar:4.5.2]说明通过查看 RocketMQ 的集群和 GC 日志只能说明但是网络不可用造成主从同步问题并未发现 Broker 自身出问题了。原因分析系统使用 CentOS 6内核版本为 2.6。通过摸排并未发现 broker 和 GC 本身的问题却发现了系统 message 日志有频繁的“page allocation failure”和“blocked for more than 120 second”错误。所以将目光聚焦在系统层面通过尝试系统参数设置例如min_free_kbytes 和 zone_reclaim_mode然而并不能消除 CPU 毛刺问题。通过与社区朋友的会诊讨论内核版本 2.6 操作系统内存回收存在 Bug。我们决定更换集群的操作系统。解决办法将集群的 CentOS 6 升级到 CentOS 7内核版本也从 2.6 升级到了 3.10升级后 CPU 毛刺问题不在乎出现。升级方式采取的方式先扩容后缩容先把 CentOS 7 的节点加入集群后再将 CentOS 6 的节点移除详见前面实战部分“RocketMQ 集群平滑运维”。Linux version 3.10.0-1062.4.1.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Fri Oct 18 17:15:30 UTC 2019集群频繁抖动发送超时现象描述监控和业务同学反馈发送超时而且频繁出现。具体现象如下图。预热现象说明上图分别为开启预热时warmMapedFileEnabletrue集群的发送 RT 监控、Broker 开启预热设置时的日志。内存传输现象说明上图分别为开启堆外内存传输transferMsgByHeapfalse时的 CPU 抖动截图、系统内存分配不足截图、Broker 日志截图。原因分析上面展现的两种显现均会导致集群 CPU 抖动、客户端发送超时对业务造成影响。预热设置在预热文件时会填充 1 个 G 的假值 0 作为占位符提前分配物理内存防止消息写入时发生缺页异常。然而往往伴随着磁盘写入耗时过长、CPU 小幅抖动、业务具体表现为发送耗时过长超时错误增多。关闭预热配置从集群 TPS 摸高情况来看并未有明显的差异但是从稳定性角度关闭却很有必要。堆外内存transferMsgByHeap 设置为 false 时通过堆外内存传输数据相比堆内存传输减少了数据拷贝、零字节拷贝、效率更高。但是可能造成堆外内存分配不够触发系统内存回收和落盘操作设置为 true 时运行更加平稳。解决办法预热 warmMapedFileEnable 默认为 false保持默认即可。如果开启了可以通过热更新关闭。bin/mqadmin updateBrokerConfig -b x.x.x.x:10911 -n x.x.x.x:9876 -k warmMapedFileEnable -v false内存传输参数 transferMsgByHeap 默认为 true即通过堆内内存传输保持默认即可。如果关闭了可以通过热更新开启。bin/mqadmin updateBrokerConfig -b x.x.x.x:10911 -n x.x.x.x:9876 -k transferMsgByHeap -v true用了此属性消费性能下降一半现象描述配置均采用 8C16GRocketMQ 的消费线程 20 个通过测试消费性能在 1.5 万 tps 左右。通过 tcpdump 显示在消费的机器存在频繁的域名解析过程10.x.x.185 向 DNS 服务器 100.x.x.136.domain 和 10.x.x.138.domain 请求解析。而 10.x.x.185 这台机器又是消息发送者的机器 IP测试的发送和消费分别部署在两台机器上。问题消费时为何会有消息发送方的 IP 呢而且该 IP 还不断进行域名解析。原因分析通过 dump 线程堆栈如下图代码定位在消费时有通过 MessageExt.bornHost.getBornHostNameString 获取消费这信息。public class MessageExt extends Message { private static final long serialVersionUID 5720810158625748049L; private int queueId; private int storeSize; private long queueOffset; private int sysFlag; private long bornTimestamp; private SocketAddress bornHost; private long storeTimestamp; private SocketAddress storeHost; private String msgId; private long commitLogOffset; private int bodyCRC; private int reconsumeTimes; private long preparedTransactionOffset; }调用 GetBornHostNameString 获取 HostName 时会根据 IP 反查 DNS 服务器InetSocketAddress inetSocketAddress (InetSocketAddress)this.bornHost; return inetSocketAddress.getAddress().getHostName();解决办法消费的时候不要使用 MessageExt.bornHost.getBornHostNameString 即可去掉该属性配置 8C16G 的机器消费性能在 3 万 TPS提升了 1 倍。

相关文章:

《RocketMQ实战与进阶》13 RocketMQ 集群踩坑记

集群节点进程神秘消失 现象描述 接到告警和运维反馈,一个 RocketMQ 的节点不见了。此类现象在以前从未发生过,消失肯定有原因,开始查找日志,从集群的 broker.log、stats.log、storeerror.log、store.log、watermark.log 到系统的 …...

从卫星照片到 actionable insights:手把手教你用Python+GDAL实现遥感地物自动识别(以植被/水体为例)

从卫星照片到Actionable Insights:PythonGDAL实战遥感地物识别 当一张卫星照片摆在面前,大多数人看到的是色彩斑斓的图案,而开发者看到的却是隐藏在像素背后的数据金矿。本文将带您用Python和GDAL工具链,从零实现卫星影像中植被与…...

FLUX.1-Krea-Extracted-LoRA多场景应用:教育PPT配图胶片风批量生成方案

FLUX.1-Krea-Extracted-LoRA多场景应用:教育PPT配图胶片风批量生成方案 1. 引言:为什么教育PPT需要专业配图 在制作教学课件时,高质量的配图能显著提升学习体验。传统方式存在三大痛点: 版权风险:随意下载网络图片可…...

统信UOS/麒麟KYLINOS系统管理员必备:用Desktop Entry文件批量创建网页快捷方式

统信UOS/麒麟KYLINOS系统管理员必备:用Desktop Entry文件批量创建网页快捷方式 在国产操作系统统信UOS和麒麟KYLINOS的运维工作中,为大量用户快速部署统一的网页快捷方式是一个常见需求。无论是构建云桌面模板,还是为部门员工配置标准工作入口…...

real-anime-z镜像合规审计:GDPR/CCPA数据处理条款适配情况说明

real-anime-z镜像合规审计:GDPR/CCPA数据处理条款适配情况说明 1. 镜像概述与部署方式 real-anime-z是基于Z-Image基础镜像构建的LoRA模型,专门用于生成高质量的动画风格图片。该镜像使用Xinference框架进行部署,并通过Gradio提供了用户友好…...

FlinkCDC 1.16.2实战:手把手教你用SQL搞定MySQL多源表合并同步(附完整脚本)

FlinkCDC 1.16.2实战:构建企业级MySQL多源表合并同步方案 当企业数据分散在多个MySQL实例中时,如何实现实时、高效的数据汇聚成为数据工程师面临的核心挑战。本文将深入探讨如何利用FlinkCDC 1.16.2的SQL能力,设计一个可扩展的多源表合并同步…...

OneDrive-Uninstaller实战:Windows 10系统级云存储清理深度解析

OneDrive-Uninstaller实战:Windows 10系统级云存储清理深度解析 【免费下载链接】OneDrive-Uninstaller Batch script to completely uninstall OneDrive in Windows 10 项目地址: https://gitcode.com/gh_mirrors/on/OneDrive-Uninstaller Windows 10系统集…...

TI毫米波雷达xWR1642开箱第一步:手把手教你用UniFlash烧录官方demo(附3.1版上位机下载)

TI毫米波雷达xWR1642开箱实战:从零到点云可视化的完整指南 拆开TI毫米波雷达xWR1642开发板的包装盒时,那种兴奋感往往会被随后而来的软件配置焦虑冲淡。作为雷达开发的新手,你可能已经注意到这块小板子背后隐藏着巨大的潜力——从自动驾驶到工…...

别再被弹窗烦了!Windows 10/11 UAC组策略保姆级调优指南(附注册表对照表)

彻底驯服UAC弹窗:Windows系统管理员的高效配置手册 每次安装软件时那个突然弹出的蓝色窗口,或是执行关键操作时打断思路的安全确认——UAC(用户帐户控制)确实是Windows系统安全的重要防线,但对于需要频繁进行系统操作的…...

GOOMs:解决深度学习梯度消失与爆炸的数值革命

1. 广义数量级(GOOMs)的数值革命在深度学习的梯度反向传播中,我们常常会遇到这样的困境:当连续相乘的梯度值小于1时,经过数十层的传播后,梯度会逐渐"消失"(下溢)&#xff…...

Apache Kylin Cube设计实战:从销售数据模型出发,手把手教你规划维度和度量

Apache Kylin Cube设计实战:销售数据分析的维度与度量艺术 当企业积累了大量销售数据后,如何快速获取业务洞察成为关键挑战。传统Hive查询在面对亿级数据时响应缓慢,而Apache Kylin通过预计算技术将查询速度提升百倍。本文将基于典型的销售数…...

Jetson Nano新手避坑:用Python RPi.GPIO控制LED和按键的完整流程(附代码)

Jetson Nano硬件编程实战:从LED控制到按键检测的避坑指南 第一次拿到Jetson Nano开发板时,很多从树莓派转过来的开发者会下意识地认为GPIO操作应该和Raspberry Pi完全一致。但当我尝试用熟悉的RPi.GPIO库控制板载LED时,却遇到了一系列意想不到…...

PreScan泊车模型里的超声波传感器:参数怎么调?避坑指南来了

PreScan泊车模型中的超声波传感器参数调优实战指南 泊车辅助系统作为自动驾驶技术中最先落地的功能之一,其仿真验证环节直接关系到实际应用的安全性和可靠性。在PreScan仿真环境中,超声波传感器的参数配置往往成为影响整个泊车模型表现的关键变量。许多工…...

别再死记GAN公式了!用‘警察与小偷’的故事5分钟搞懂损失函数

用"猫鼠游戏"理解GAN:当造假者遇上鉴伪大师 想象一下这样的场景:一位艺术品伪造大师(生成器)不断精进仿制技术,而博物馆鉴定专家(判别器)则持续升级检测手段——这种动态博弈正是生成…...

从ELF Core File到内核虚拟内存:深入理解/proc/kcore如何‘伪造’一个128TB的巨型文件

解密Linux内核的魔法文件:/proc/kcore如何虚拟128TB内存镜像 当你第一次在终端输入ls -lh /proc/kcore时,可能会被那个惊人的128TB文件大小吓到——这比任何现有硬盘容量都大几个数量级。但更神奇的是,这个"庞然大物"实际上不占用任…...

别再乱写伪代码了!给论文加分的符号命名实战指南(附LaTeX模板)

学术论文伪代码符号命名的艺术:从评审视角提升可读性的实战策略 当审稿人打开你的论文时,第一眼看到的往往不是复杂的算法创新,而是那些看似微不足道的符号命名。我曾参与过多次国际顶会论文评审,最令人头疼的不是理解算法本身&am…...

构筑内容安全防线:商品描述敏感词过滤 API 的设计与实现

在电商与数字化营销场景中,商品描述不仅是连接产品与消费者的桥梁,更是平台合规性的“高危区”。根据最新《广告法》及各大平台监管要求,一句包含“顶级”、“全网首发”或不当隐喻的描述,可能导致商品下架甚至法律诉讼。构建一个…...

Hutool SFTP实战:手把手教你搭建一个带进度条和断点续传的文件上传服务

Hutool SFTP实战:构建企业级文件传输服务的完整方案 在当今数字化业务场景中,大文件传输已成为许多企业应用的刚需。无论是用户上传高清视频内容,还是分布式系统间的数据同步,传统HTTP协议在稳定性、效率和用户体验方面往往捉襟见…...

SuperMap iClient3D for WebGL 倾斜摄影压平进阶:如何用turf.js实现更精准的模型随机分布与避让?

SuperMap iClient3D for WebGL 倾斜摄影压平进阶:如何用turf.js实现更精准的模型随机分布与避让? 在智慧城市与数字孪生项目中,倾斜摄影模型的精细化处理一直是开发者面临的挑战。传统均匀分布模型的方式虽然实现简单,但往往缺乏真…...

DevEco Studio报错后,项目目录里多了一堆.map和.js文件?别慌,用这个插件一键清理ArkTS缓存

DevEco Studio缓存文件异常?ArkTS编译残留文件高效清理指南 遇到DevEco Studio报错后项目目录突然出现大量.map和.js文件,这可能是ArkTS编译过程中产生的临时文件残留。这些文件不仅占用空间,还可能导致项目无法正常运行。本文将带你快速识别…...

技术分享 | 接口自动化的高复用测试方案

一 探索新测试方案的初衷 我们对近期有信创或上云改造计划的多个系统进行调研分析,发现相关系统具有接口参数多、关联条件复杂、请求返回格式不统一的共同特点,在尝试使用常规自动化测试方案建设时,发现了以下急需攻克的难关: 1…...

从理论到信号:手把手用Matlab freqs函数调试你的模拟滤波器设计(附Butterworth/Bessel案例)

从理论到信号:手把手用Matlab freqs函数调试你的模拟滤波器设计(附Butterworth/Bessel案例) 在模拟滤波器设计的最后阶段,理论计算与仿真验证的鸿沟常常让工程师陷入困境。传递函数系数躺在纸面上,但实际频率响应是否达…...

《JAVA面经实录》- 设计模式面试题(一)

《JAVA面经实录》- 设计模式面试题(一)这份是设计模式面试题・标准答案背诵版语言精炼、口语化、不啰嗦,面试官最爱听,直接背就能过。一、基础必问题(标准答案)1.设计模式三大类?创建型:控制对象创建&#…...

基于深度学习的YOLOv8智慧交通识别 车辆轨迹识别 目标检测研究分析软件 智能辅助驾驶交通分析

项目功能 交通物体检测与实例分割 本项目基于YOLOv8框架,能够对交通物体进行检测。对图片能检测到物体并用锚框进行标注展示,对于视频则是对每一帧进行物体检测分析,同样使用锚框进行标注,最终生成的物体检测视频能实时追踪物体并…...

BBDown终极指南:快速掌握B站视频下载的完整教程

BBDown终极指南:快速掌握B站视频下载的完整教程 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown 想要轻松下载B站视频进行离线观看吗?BBDown正是你需要的强大工具…...

别再只会Merge了!用IDEA的Cherry-Pick功能,优雅管理你的个人实验分支

别再只会Merge了!用IDEA的Cherry-Pick功能,优雅管理你的个人实验分支 在独立开发或小团队协作中,我们常常会维护一个长期存在的实验性分支(比如feature-experiment),用于尝试新功能或修复复杂bug。传统做法…...

无真实标签场景下的回归模型监控策略与实践

1. 无真实标签场景下的回归模型监控困境在真实业务场景中,我们常常遇到一个尴尬局面:模型上线后,新数据的真实标签(ground-truth)往往需要数天甚至数周才能获取。以金融风控场景为例,一笔贷款申请的真实违约…...

城市家庭园艺新宠!生升营养土让新手也能种出好绿植

随着城市居民对品质生活的追求,家庭园艺、阳台种植成为新趋势,但新手常面临“土壤板结、浇水不当、养分不足”三大难题。生升农业针对城市家庭场景,研发专用营养土,兼顾疏松透气、保水保肥、安全无病菌等特点,经佛山、…...

从原料到品质,生升农业如何筑牢全国品牌根基?

在农业产业链中,原料是产品品质的第一道防线,也是品牌全国化的核心底气。生升农业深耕育苗基质、营养土领域多年,之所以能覆盖全国20余个省市、服务超10万家种植户,关键在于其构建了覆盖全国的标准化原料供应链体系,从…...

手把手教你配置DSP28335的SCI FIFO中断:从寄存器设置到完整回显程序

DSP28335 SCI FIFO中断配置实战:从寄存器解析到回显工程搭建 在嵌入式系统开发中,串口通信作为最基础的外设接口之一,其稳定性和效率直接影响整个系统的可靠性。TMS320F28335作为TI C2000系列中的明星产品,其增强型SCI模块提供的F…...