当前位置:首页 > 科技  > 软件

深入剖析:如何使用Pulsar和Arthas高效排查消息队列延迟问题

来源: 责编: 时间:2024-04-30 08:43:05 403观看
导读背景前两天收到业务反馈有一个 topic 的分区消息堆积了:图片根据之前的经验来看,要么是业务消费逻辑出现问题导致消费过慢,当然也有小概率是消息队列的 Bug(我们使用的是 pulsar)。排查图片通过排查,发现确实是在一点多的时

背景

前两天收到业务反馈有一个 topic 的分区消息堆积了:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

根据之前的经验来看,要么是业务消费逻辑出现问题导致消费过慢,当然也有小概率是消息队列的 Bug(我们使用的是 pulsar)。dQI28资讯网——每日最新资讯28at.com

排查

图片图片dQI28资讯网——每日最新资讯28at.com

通过排查,发现确实是在一点多的时候消息堆积了(后面是修复之后堆积开始下降)。dQI28资讯网——每日最新资讯28at.com

于是我在刚才堆积处查看了一条堆积消息的列表:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

获取到其中一条消息的 messageId.dQI28资讯网——每日最新资讯28at.com

这里本质上使用的是 pulsar-admin 的 API。org.apache.pulsar.client.admin.Topics#peekMessagesdQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

再通过这条消息的 id (为了演示,这里的 messageId 可能不一样)在我们的 pulsar 消息链路系统中找到了消息的发送链路:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

通过这个链路会发现消息一直在推送,但就是没有收到客户端的 ACK 响应。dQI28资讯网——每日最新资讯28at.com

相关的消息链路埋点可以参考这里:如何编写一个 Pulsar Broker Interceptor 插件dQI28资讯网——每日最新资讯28at.com

简单来说就是在以下几个 broker 提供的拦截器接口加上埋点数据即可:dQI28资讯网——每日最新资讯28at.com

  • messageProduced
  • messageDispatched
  • messageAcked

既然知道了是客户端没有响应 ACK,那就得知道客户端此时在干什么。dQI28资讯网——每日最新资讯28at.com

首先排查了 JVM 内存、CPU 等监控情况,发现一切都挺正常的,这段时间没有明显的尖刺。dQI28资讯网——每日最新资讯28at.com

Arthas 排查

于是便准备使用 arthas 查看下线程的运行情况。dQI28资讯网——每日最新资讯28at.com

我们进入到对应 Pod 的容器,执行:dQI28资讯网——每日最新资讯28at.com

java -jar arthas-boot.jar

因为 JVM 内存都没有啥异常,所以先看看 thread 的运行堆栈,考虑到是 pulsar 消费线程卡住了,所以我们需要加上线程状态已经过滤下线程的名称:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

thread --state WAITING | grep pulsar

此时就会列出当前 Java 进程中状态为 WATING 并且线程名称以 pulsar 开头的线程。dQI28资讯网——每日最新资讯28at.com

我在之前的文章 从 Pulsar Client 的原理到它的监控面板 中分析过客户端的原理。dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

可以知道 pulsar 客户端在其中使用的是 pulsar-打头的线程名称,所以这样就列出了我们需要重点关注的线程。dQI28资讯网——每日最新资讯28at.com

我们以图中列出的线程 Id:320 为例:dQI28资讯网——每日最新资讯28at.com

thread 320

图片图片dQI28资讯网——每日最新资讯28at.com

此时便会打印当前线程的堆栈。dQI28资讯网——每日最新资讯28at.com

从上述堆栈中会发现线程一直处于 IO 操作中,看起来是在操作数据库。dQI28资讯网——每日最新资讯28at.com

我们再往下翻一翻,会发现上层调用的业务代码:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

查阅代码得知这是一个数据库的写入操作,看起来是在这个环节数据库响应过慢导致的 pulsar 线程被阻塞了;从而导致消息没有及时 ACK。dQI28资讯网——每日最新资讯28at.com

为了最终确认是否由数据库引起的,于是继续查询了当前应用的慢 SQL 情况:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

发现其中有一个查询语句调用频次和平均耗时都比较高,而且正好这个表也是刚才在堆栈里操作的那张表。dQI28资讯网——每日最新资讯28at.com

经过业务排查发现这个慢 SQL 是由一个定时任务触发的,而这个定时任务由于某些原因一直也没有停止,所以为了快速解决这个问题,我们先尝试将这个定时任务停掉。dQI28资讯网——每日最新资讯28at.com

果然停掉没多久后消息就开始快速消费了:dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

从这个时间线也可以看得出来了,在服务端推送了多次之后终于收到了 ACK。dQI28资讯网——每日最新资讯28at.com

修复之后业务再去排查优化这个慢 SQL,这样这个问题就得到根本的解决了。dQI28资讯网——每日最新资讯28at.com

更多好用技巧

当然 arthas 好用的功能还远不止此,我觉得还有以下功能比较好用:dQI28资讯网——每日最新资讯28at.com

火焰图

profile:可以输出火焰图,在做性能分析的时候非常有用。dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

动态修改内存数据

还记得之前我们碰到过一个 pulsar 删除 topic 的 Bug,虽然最终修复了问题,但是在发布修复版本的时候为了避免再次触发老版本的 bug,需要在内存中将某个关键字段的值修改掉。dQI28资讯网——每日最新资讯28at.com

而且是不能重启应用的情况下修改,此时使用 arthas 就非常的方便:dQI28资讯网——每日最新资讯28at.com

curl -O https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar 1 -c "vmtool -x 3 --action getInstances --className org.apache.pulsar.broker.ServiceConfiguration  --express 'instances[0].setTopicLevelPoliciesEnabled(false)'"

这里使用的是 vmtool 这个子命令来获取对象,最终再使用 express 表达式将其中的值改为了 false。dQI28资讯网——每日最新资讯28at.com

当然这是一个高危操作,不到万不得已不推荐这么使用。dQI28资讯网——每日最新资讯28at.com

Arthas Tunnel & Web Console

这是一个方便开发者通过网页就可以连接到 arthas 的功能,避免直接登录到服务器进行操作。dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

图片图片dQI28资讯网——每日最新资讯28at.com

我们在研效普通也内置了该功能,让开发排查问题更加方便。dQI28资讯网——每日最新资讯28at.com

CPU 使用过多

cpu 异常使用排查也是一个非常有用的功能,虽然我们可以通过监控得知 JVM 的 cpu 使用情况,但是没法知道具体是哪个线程以及哪行代码造成的 cpu 过高。dQI28资讯网——每日最新资讯28at.com

thread -n 3

图片图片dQI28资讯网——每日最新资讯28at.com

使用以上命令就可以将 cpu 排名前三的线程打印出来,并且列出他的堆栈情况,这样可以很直观的得知 cpu 消耗了在哪些地方了。dQI28资讯网——每日最新资讯28at.com

当然还有一些 trace 查询:dQI28资讯网——每日最新资讯28at.com

trace demo.MathGame run '#cost > 10'

比如这是将调用超过 10ms 的函数打印出来,不过如果我们接入了可观测系统(OpenTelemetry、skywalking等)这个功能就用不太上了。dQI28资讯网——每日最新资讯28at.com

还可以在运行的时候不停机修改日志级别,这种在线上排查一些疑难杂症的时候非常好用(通常情况下 debug 日志是不打印的),我们可以将日志级别调整为 debug 打印出更加详细的信息:dQI28资讯网——每日最新资讯28at.com

[arthas@2062]$ logger --name ROOT --level debugupdate logger level success.

如果是在 kubernetes 环境中执行也有可能碰到 Java 进程启动后没有在磁盘中写入 PID 的情况:dQI28资讯网——每日最新资讯28at.com

$ java -jar arthas-boot.jar  [INFO] arthas-boot version: 3.6.7  [INFO] Can not find java process. Try to pass <pid> in command line.  Please select an available pid.

导致直接运行的时候无法找到 Java 进程;此时就需要先 ps 拿到 PID 之后再传入 PID 连入 arthas:dQI28资讯网——每日最新资讯28at.com

$ java -jar arthas-boot.jar 1

更多关于 arthas 的用法可以参考官网。dQI28资讯网——每日最新资讯28at.com

参考链接:dQI28资讯网——每日最新资讯28at.com

  • https://pulsar.apache.org/docs/3.2.x/admin-api-topics/#peek-messages
  • https://crossoverjie.top/2023/12/11/ob/Pulsar-Broker-Interceptor/
  • https://arthas.aliyun.com/
  • https://crossoverjie.top/2024/01/09/ob/Pulsar-Delete-Topic/

本文链接:http://www.28at.com/showinfo-26-86685-0.html深入剖析:如何使用Pulsar和Arthas高效排查消息队列延迟问题

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一种避免写大量CRUD方法的新思路

下一篇: 太优雅了!Rust 200 行代码实现表达式解析

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
  • 与兆芯合作 联想推出全新旗舰版笔记本电脑开天N7系列

    联想与兆芯合作推出全新联想旗舰版笔记本电脑开天 N7系列。这个系列采用兆芯KX-6640MA处理器平台,KX-6640MA 处理器是采用了陆家嘴架构,16nm 工艺,4 核 4 线
Top