ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RabbitMQ管理控制台实操指南:从连接排查到消息堆积治理

RabbitMQ管理控制台实操指南:从连接排查到消息堆积治理 用过 RabbitMQ 的人应该都有这种体会本地环境 docker 起一个实例代码里把连接信息一配消息收发基本就通了感觉也没那么复杂。可一旦到了联调、排查线上问题的时候消息堆积了、消费端不工作了、交换机路由不到队列了光靠代码和日志去猜效率非常低。这时候打开管理页面往往一眼就能定位问题在哪。这篇文章就把我平时操作 RabbitMQ 管理页面的整套方法整理出来从登录配置、连接和队列排查到用户权限、监控告警再到高频问题排查全走一遍。适合两类人看刚入门的后端同学用它搭建起对 RabbitMQ 的整体认知正在接手 RabbitMQ 运维、经常要帮别人查消息问题的开发同学可以把它当速查手册用。1. 管理页面到底能干什么管理页面本质上是 RabbitMQ 自带的rabbitmq_management插件默认跑在 15672 端口上装好 RabbitMQ 之后需要额外启用才生效。它的作用不是让你在页面上收发业务消息而是把一个 RabbitMQ 节点或集群的内部状态可视化出来包括连接、通道、队列、交换机、用户权限、节点资源占用等等。第一次打开页面的时候顶部导航栏有六个页签Overview、Connections、Channels、Exchanges、Queues、Admin。这几个页签覆盖了 RabbitMQ 的所有运行维度下面逐个说清楚它们分别是干什么的。1.1 页面的整体布局和每个页签的用途Overview节点总览页。这里能看到整个 RabbitMQ 节点的消息收发速率、队列数量、连接数、内存和磁盘占用以及所有虚拟主机vhost的消息统计。Connections连接列表。展示当前所有客户端与 RabbitMQ 建立的 TCP 连接包括生产者连接和消费者连接。点进任意一条连接能看到连接来源 IP、用户名、vhost、SSL 情况等。Channels通道列表。一条连接里可以包含多个通道通道是真正干活的地方消息收发、ACK 确认这些动作都发生在通道层面。这里的指标比连接更细重点看 Prefetch 和未确认消息数。Exchanges交换机列表。生产者发送消息时先到交换机交换机再根据路由规则把消息分发到队列。这个页面用来创建交换机、删除交换机、查看绑定关系。Queues队列列表。最常用的页面。每个队列的消息积压数、消费速率、消费者数量都能在这里看到也可以直接手动发消息、手动消费消息。Admin管理配置页。用户、vhost、权限、策略、集群节点状态都在这里配置。1.2 为什么建议先从 Overview 页看起很多人排查问题时习惯直接打开 Queues 看有没有堆积我实际用下来觉得不太够。 消息堆积只是结果原因可能是消费者挂了、可能是连接断了、也可能是生产者短时间内灌入了大量消息。这时候 Overview 页最有用它把整个节点的状态汇总到了一起。举个例子有一次生产环境消息处理变慢我打开 Queues 页看到两个队列都有堆积但看不出共性。切到 Overview 页之后发现节点内存一直往上走发布速率并不高但消费速率在持续下降最后定位到是某个消费者连接异常消息进了队列但没人消费。这种跨维度的判断Overview 页是最合适的入口。另外Overview 页右侧显示的节点信息也值得养成习惯去看比如内存告警、磁盘告警。RabbitMQ 在内存或磁盘达到阈值时会触发阻塞生产者会被 block这种情况下业务侧表现就是消息发不出去如果不看 Overview很容易跑到客户端那边去排查连接问题浪费时间。2. 登录之前必须知道的事管理页面虽然功能强大但很多人第一步就卡住了页面打不开或者打开了登录不进去。先把这个基础问题解决掉。2.1 默认账号、默认地址和端口RabbitMQ 装好后默认有一个guest账号密码也是guest但是有一个很关键的默认限制guest 用户只能通过 localhost本机访问管理页面和连接服务也就是只能在部署 RabbitMQ 的那台服务器上登录。如果你是在自己的电脑上访问服务器的 15672 端口用 guest 是登不进去的会一直提示 login failed。这个设计主要是安全考虑避免生产环境默认账号被外部直接访问。具体到使用场景本机测试直接用 guest/guest 登录没问题。远程访问、容器部署、生产环境一定要创建自己的用户并授予对应权限。管理页面默认地址是http://服务器IP:15672。注意管理端口 15672 和消息通信端口 5672 是两个概念要确保防火墙和云安全组都放通了只放行 5672 的话页面是访问不通的。2.2 容器部署时 guest 登录不进多数是端口和插件的问题现在很多场景用 Docker 部署 RabbitMQ这也是最容易出问题的地方。我用 docker-compose 部署的配置一般长这样version: 3.8 services: rabbitmq: image: rabbitmq:3.13-management container_name: rabbitmq ports: - 5672:5672 - 15672:15672 environment: - RABBITMQ_DEFAULT_USERadmin - RABBITMQ_DEFAULT_PASSadmin123 volumes: - rabbitmq_data:/var/lib/rabbitmq volumes: rabbitmq_data:这里有个细节如果你是第一次部署我建议直接用rabbitmq:3-management这种带 management 后缀的镜像它已经把管理插件内置并启用好了不用再手动敲rabbitmq-plugins enable。但如果你用的是普通rabbitmq:3镜像就要自己进容器里启用插件docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_management如果部署完了页面还打不开第一反应不是去看 RabbitMQ 日志而是先确认端口有没有映射出来、容器有没有正常起来用docker ps看状态是 Up 还是 Exited。常见的坑是把 15672 映射到了别的端口或者宿主机防火墙没放行导致外部访问不到。2.3 开启管理插件的几种方式除了上面说的容器内手动启用常规安装方式下启用管理插件用这一条命令就行rabbitmq-plugins enable rabbitmq_management系统安装的 RabbitMQ 在启用插件后还需要重启一下服务systemctl restart rabbitmq-server如果是 Windows 上安装启动命令行工具时需要以管理员身份运行不然插件命令可能会因为权限不足报错。另外建议顺手把rabbitmq-plugins list的输出看一眼确认rabbitmq_management前面是否带[e]标记[e]代表 enabled也就是已启用。没有这个标记的管理页面是不会监听的。注意启用插件之前先确认 Erlang 版本和 RabbitMQ 版本匹配。Windows 上经常出现 RabbitMQ 装了但服务起不来的情况绝大多数是 Erlang 版本太高或太低导致的不兼容。查询官方版本对照表比自己瞎猜靠谱得多。3. 第一次登录连接与通道怎么排查登录进管理页面之后经常会遇到两个页签长得特别像Connections 和 Channels。我先说清楚这两个页签的关系再讲怎么用它们排查问题。3.1 Connections 页面一条连接就是一个客户端Connections 列表里每一行都是一个 TCP 连接基本由生产者和消费者两方组成。点开任意一条连接右边会展示大量详情平时我重点关注这几个字段User这个连接用的是哪个账号连进来的。Virtual host连接使用的是哪个 vhost。Client provided name客户端代码里指定的连接名如果代码里没设置这里会显示客户端库自动生成的名称。排查问题时建议在代码里给连接起个有意义的名字不然全是默认名很难区分是哪台机器。From / To客户端 IP 和端口以及实例端的 IP 和端口。这里有个很实用的排查思路当生产环境连接数异常增长时点开 Connections 列表按 User 排序能快速看出是不是同一个账号建立了大量连接。正常情况每个服务实例只会建立 1~2 条连接如果一个服务开了多线程却共用连接或者相反每个线程都建连接连接数表现是完全不同的。我之前排查过一个问题某个消费者服务在运行一段时间后连接数从十几个一路涨到几百个页面里看到大量来自同一台应用的连接。后来发现是代码里消费者没有复用连接每次创建监听器都会 new 一个 Connection。通过在管理页面确认连接数异常就能快速把排查方向从“网络问题”拉回“客户端代码问题”。3.2 Channels 页面真正的消息通道一条连接内部会创建多个 Channel打一个比方连接像一条网线通道是网线里的逻辑线路。消息的发送、消费、ACK 确认都发生在 Channel 上所以 Channels 页的指标更能反映业务状态。Channels 页面里每行是一个通道点开后重点关注Prefetch count消费者每次从队列批量拉取的消息条数。Unacked已经发给消费者、但消费者还没确认处理完成的消息数量。Consumer count该通道对应的消费者数量。如果发现某个队列的Unacked数字一直很高而Ready待消费消息也在上涨说明消费端拉走了消息但处理不过来而且处理完成后没有及时发 ACK。这种情况要去看消费逻辑是不是有阻塞操作或者消息处理耗时异常。管理页面虽然不会告诉你具体是哪行代码的问题但通过 Unacked 和 Ready 的关系可以迅速缩小问题范围。3.3 用 MQTTX 连接 RabbitMQ 时怎么确认成功现在很多物联网和前端场景会把 MQTT 协议接到 RabbitMQ 上这就要用 MQTT 插件。最近不少人问我用 MQTTX 这个客户端去连 RabbitMQ连不上也不知道问题出在哪。这里说我的操作路径。第一步开启 MQTT 插件rabbitmq-plugins enable rabbitmq_mqtt第二步确认端口。RabbitMQ 的 MQTT 默认端口是 1883WebSocket 方式默认是 15675。用 MQTTX 建连接时选择 TCP 协议端口填 1883。注意不是 5672第三步账号不能填 guest。哪怕你的 RabbitMQ 在本地MQTT 插件对 guest 的限制也一样存在要先去 Admin 页面创建一个用户然后用这个用户名密码填入 MQTTX。如果连上了但 MQTTX 没有任何反应重新检查一下管理页面的 Connections 列表能看到一条来自 MQTTX 的 TCP 连接。看到这条连接就说明 MQTTX 已经成功连上 RabbitMQ 了接下来就可以订阅主题测试收发。这里有个容易踩的坑MQTT 主题topic/xxx不是直接对应队列名它要经过 exchange 的绑定规则转换成队列如果你订阅的主题没有对应的绑定关系消息自然收不到这在页面上的 Exchanges 页里是可以一一查证的。4. 队列管理是日常用得最多的页面Queues 页签是排查消息问题的主力页面生产环境里大多数消息收发异常最后都要落到队列上来查。这里讲创建队列和查看队列状态的核心操作。4.1 手工创建队列关键参数怎么选在 Queues 页面点击 Add a new queue会看到几个参数。很多人图省事全默认后面用起来才发现不对。我按实际情况说一下Name队列名。同一 vhost 下不能重名。Durable持久化标记。选上之后队列定义会持久化RabbitMQ 重启后队列不会消失。注意 Durable 只保证队列定义不丢失消息要持久化还取决于消息发送端的 deliveryMode 是不是设置成了 2。两者都满足重启后消息才能保住。Auto delete如果最后一个消费者断开连接队列会自动删除。适合做临时队列业务队列一般不要勾否则消费者一断队列没了消息全丢。Arguments队列的高级参数比如消息过期时间x-message-ttl、队列最大长度x-max-length、死信交换机x-dead-letter-exchange。实战里经常有这种需求某些订单在超时后需要自动关单。用管理页面或者代码声明队列的时候给队列加上x-message-ttl60000和x-dead-letter-exchangedelay.exchange消息进入队列后 60 秒没人消费就会自动转到死信交换机再由死信交换机路由到另一个队列做延时处理。很多教学项目里异步通知做延迟消息也是这个思路。4.2 从队列里手工拿消息排查单条消息问题有时候测试环境模拟了一条消息想知道队列里到底存了什么或者需要把某条堆积消息重新消费一遍可以直接在队列详情页操作。队列详情页往下拉有一个Get messages区域Ack Mode选择Automatic ack消息拿出来后直接从队列移除选择Reject requeue true消息拿出来后但放回队列适合只看内容不消费的场景。Encoding消息内容是文本选Text二进制选 Base64。Count取多少条最多可以取 500 条但一般几条就够看了。这个功能对排查序列化问题特别有用。有一次我这边消费端报反序列化异常消息一直 ACK 失败。我在管理页面把堆积消息 Get 出来看发现 payload 里有几个字段类型和预期不一致发布方写入的结构和消费方 Java 对象对不上。直接在页面看原始内容问题一目了然不用再去翻发布端日志。4.3 队列状态和消息积压的正确看法队列列表里每个队列有几个核心数字Ready当前在队列里等待被消费的消息数。Unacked已经被消费者取走但还没确认的消息数。TotalReady Unacked 的总和。Consumers当前正在从这个队列消费的消费者数量。我判断队列是否健康不会只看 Total。如果 Total 大但 Unacked 也占了大半说明消费者拉取正常、处理跟不上重点看消费逻辑如果 Total 大但 Consumers 是 0说明根本没人在消费要去看消费者服务挂了还是连接被拒了如果队列一直 Ready 为 0但业务上感觉消息没发出去那问题不在队列本身要往前面的交换机、绑定关系上查。队列操作里还有两个按钮Delete 和 Purge。Delete 是删整个队列Purge 是清空队列里的消息但保留队列。生产环境一定不要手滑点 Delete删掉后如果代码没有自动重新声明的逻辑整个链路就断了比消息堆积严重得多。5. 交换机、路由与绑定搞懂消息到底去哪了很多人用 RabbitMQ 是只声明队列绑定关系全交给代码去建很少主动去看 Exchanges 页面。但排查“消息发出去不见了”这类问题交换机页面才是关键。5.1 Exchanges 页面能做什么点进 Exchanges 页签后能看到当前 vhost 下所有交换机。每个消息发出时会携带一个 routing keyRabbitMQ 根据交换机的类型和绑定规则把消息转发到符合条件的队列。页面上的功能主要是创建交换机。查看每个交换机的绑定关系。直接往某个交换机发消息验证路由是否正确。删除交换机。建立交换机时需要选类型directrouting key 精确匹配。适合点对点通知比如订单支付成功发给订单服务。fanout忽略 routing key把消息广播到所有绑定的队列。适合群发通知、全量缓存刷新。topicrouting key 按通配符匹配*匹配一个单词#匹配零个或多个单词。适合订阅模式比如order.#能收到所有订单相关消息。headers根据消息头匹配实际用得少我基本不推荐。5.2 弄清楚绑定关系能够定位 80% 的消息丢失问题交换机不存消息它只是根据绑定关系做转发。如果交换机路由不到队列消息会被直接丢弃或者进入备用交换机日志里可能只会出现unroutable字样。举个例子生产者在发送消息时指定了routing key order.create交换机类型是 topic页面上查看绑定关系时发现队列绑定的 key 是order.*那这条消息能路由成功如果绑定写成了pay.*消息就到不了这个队列。这种绑定不匹配的错最容易在开发环境配好、生产环境复制配置时漏改 routing key 出现。在 Exchanges 页签点击某个交换机能看到它绑定了哪些队列和 routing key。拿这里的信息和代码里的发布逻辑对照基本就能判断出消息有没有正确进入队列。5.3 直接在页面发消息测试路由管理页面的 Exchanges 详情里有一个 Publish Message 功能这是我很推荐的一个排查手段。输入 routing key、消息内容点 Publish Message 就能往这个交换机发一条测试消息。我之前排查过一次消息丢失问题生产和消费两端代码确认都改对了但消息就是没到消费端。当时我在测试环境直接拿生产同样的 exchange 和 routing key 在页面上发了一条测试消息结果队列里马上就能看到。这就说明交换机绑定、生产者代码都没问题问题出在消费端没有正常声明队列或者声明的是另一个队列。通过页面上的手工发送把“生产”、“路由”、“消费”三个环节单独拆开验证效率比来回查日志高很多。提示页面 Publish Message 发出的消息对生产环境也有效。在生产环境手工发布测试消息前先确认消息内容会不会触发线上副作用比如是否会产生短信、扣款等真实业务影响。日常排查建议优先在测试环境操作。6. 用户、vhost 与权限分配管理页面里 Admin 页签是最容易被新手忽略的但工作区里的用户分配、环境隔离全都靠它。6.1 虚拟主机vhost到底隔离了什么vhost 可以理解为 RabbitMQ 内部的独立命名空间。不同 vhost 之间的交换机、队列、绑定完全隔离消息不能跨 vhost 路由。这一点常常被误当成“多租户隔离”来用。对不同业务线或不同环境我建议都单独建 vhost。比如dev、test、prod各一个再配对应账号和权限。这样就算两个团队共用同一个 RabbitMQ 实例A 团队的队列和 B 团队的队列重名了也不会互相冲突。管理页面顶部的 vhost 下拉框可以快速切换不同 vhost每个 vhost 下的队列、交换机、绑定都是独立的。如果你在管理页面看不到某些队列检查一下当前选中的 vhost 是不是对的那个。这是新手最常见的困惑来源之一。6.2 创建用户并分配权限的完整步骤在 Admin 页签下的 Users 区域点击 Add a user填用户名、密码再勾选 Tags。Tags 决定这个用户能访问管理页面的哪些功能management能访问管理页面能看到与自身权限相关的 vhost 状态。policymaker在 management 基础上还能管理策略。monitoring能看到所有 vhost 的指标、连接、通道信息但不能做修改。administrator最高权限管理用户、vhost、权限、策略都能配置。用户建完后只是拥有了访问管理页面的能力但连接具体哪个 vhost 还要单独授权。点击用户名进入详情页在 Permission 区域选择 vhost再设置三个正则权限Configure是否允许配置资源比如创建队列、交换机。Write是否允许发送消息。Read是否允许消费消息。这里提供一个我常用的分配习惯业务服务账号给 Configure、Write、Read 全开但只在它对应的 vhost 内开监控账号只给 Read 权限用于从管理页面或 API 拉消息积压数据管理员账号才给 administrator。6.3 前端访问 RabbitMQ 的正确姿势很多前后端分离的项目里前端问能不能直接连接到 RabbitMQ 去订阅消息。我的答案很明确不要让浏览器直接连 RabbitMQ 的 5672 端口15672 管理页面也不是给业务前端用的。正确的做法是前端通过后端提供的 WebSocket 接口去订阅消息后端再用 RabbitMQ 客户端消费消息并推给前端。如果只是运维和管理需要你可以在内网通过管理页面查看所有状态如果要用浏览器实时看监控数据那要接入监控系统或者调用管理 API而不是把 15672 直接暴露到公网。管理页面默认暴露的信息已经很敏感包括队列名、消息量、用户权限等直接公网暴露风险很高生产环境一定要把 15672 限制在内网访问。7. 监控、策略与告警的实用技巧管理页面除了日常业务排查也能承担一部分监控职责。虽然它比不了专业监控系统但节点级的关键指标足够帮你发现问题的前兆。7.1 Overview 页的图表怎么看出问题Overview 页中间部分有几个图表分别展示消息发布速率、消息消费速率、消息确认速率、连接数、队列数等。我习惯先看发布速率和消费速率是否大致匹配。如果发布速率在 500 条/秒而消费速率只有几十条/秒而且持续一段时间那消费者处理能力大概率跟不上缓存队列迟早会被耗尽。如果发布速率已经是 0但消费速率也在 0整体处于停顿状态就要考虑是不是节点进入阻塞状态了。7.2 队列和 vhost 级别的消息统计在 vhost 下拉列表切换到某个 vhost 之后Overview 下方会展示这个 vhost 范围内按队列粒度统计的消息速率。这个位置看消息积压变化趋势非常方便并且数据和 Queues 页签的实时值能互相印证。线上排查时我一般先按 vhost 筛一遍看所有队列的分布情况再进入 Queues 页逐个定位。这样比单看某一个队列更全面万一有多个队列同时堆积也能看出是不是某个上游服务统一异常。7.3 用策略Policies统一管理多队列配置不推荐手工去每个队列逐个配死信、TTL 和镜像策略。队列一多手工配不仅慢还容易漏。RabbitMQ 的策略功能就解决这个问题通过名称正则匹配把一批队列统一应用同一套配置。在 Admin 页签的 Policies 区域点击 Add / update a policy配置里注意几个字段Name策略名。Pattern队列名称的正则比如^order\.表示匹配所有以order.开头的队列。Priority多个策略命中时优先用哪个。Definition策略配置内容比如ha-mode: all做镜像队列message-ttl: 60000给匹配到的队列设置消息过期时间。策略非常适合做批量维护新队列只要名字符合规则创建后自动套用策略不用排队一条条配置。生产环境我给订单、支付、通知几类队列分别建策略后续运维省了很多事。7.4 节点资源和告警Overview 页右侧的节点列表里能看到当前节点名称、内存使用、磁盘剩余、进程数、文件描述符、Socket 数等。RabbitMQ 触发内存告警或磁盘告警时会主动阻塞所有连接上的生产者表现就是客户端发送消息卡住、超时。我踩过的一个印象很深的坑某个测试环境消息一直发不出去业务方报生产者报错最后发现问题不是代码、也不是网络而是磁盘满了RabbitMQ 触发磁盘告警后把所有写操作都 block 了。这个现象如果不看 Overview 页是不会想到的。管理页面顶部如果有告警横幅一定要第一时间处理通常步骤是清理磁盘、释放内存或者调高阈值然后重启节点或者等待自动恢复。8. 常见问题排查实录最后按“问题现象 → 排查思路 → 解决办法”的方式整理一份高频问题清单都是我实际遇到或帮别人解决过的。问题现象排查思路解决办法管理页面打不开telnet 15672 不通是否安装/启用了管理插件rabbitmq-plugins enable rabbitmq_management启用后重启服务Docker 部署后 15672 访问不了端口是否正确映射、镜像是否带 management 插件使用rabbitmq:3-management镜像或手动进容器启用插件检查docker ps远程用 guest 登录失败guest 只允许本机访问属于安全限制创建新用户并赋予对应 vhost 权限用新用户登录Windows 上 RabbitMQ 启动失败Erlang 版本与 RabbitMQ 版本不兼容或服务名冲突卸载重装匹配版本的 Erlang查看日志%APPDATA%\RabbitMQ\log\确认服务名称消息堆积但没消费者消费者服务是否在线消费者代码是否声明了正确队列管理页面 Queues 页看 Consumers 数如果为 0 检查消费者服务如果消费者在线但一直为 0检查绑定和并发消费线程队列的 Ready 一直涨Unacked 也高消费者处理速度跟不上或消费逻辑有阻塞查看消费者日志优化处理逻辑检查 Prefetch 和 ACK 是否及时消息发出去但在队列里看不到路由 key、交换机类型或绑定关系不匹配到 Exchanges 页看绑定关系用 Publish Message 验证路由节点启动后自动停止磁盘写入权限、主机名解析、内存不足查 RabbitMQ 日志确认节点主机名和/etc/hosts映射用 MQTTX 连接 MQTT 失败是否开启 mqtt 插件、端口是不是用的 1883、账号是不是 guest启用插件使用自定义用户端口确保 1883用管理页面 Connections 确认真实连接状态内网离线服务器安装 RabbitMQ没有公网源无法直接下载依赖到官网下载对应的.rpm或.deb包及 Erlang内网离线安装或者内网搭建本地源想在页面看到所有 vhost 信息但看不到当前登录用户的权限不足用户标签调整为 monitoring 或 administrator然后重新登录有一些问题没法在表格里写完单独再说几个。离线内网安装 RabbitMQ 的时候最麻烦的就是 Erlang 依赖。官方 RPM 包不打包 Erlang需要提前在内网准备好 Erlang 的安装包、RabbitMQ 安装包和依赖的 SOCAT、logrotate 等基础组件。不要试图在离线环境用yum install rabbitmq-server会卡在依赖解析上提前下载好再传进去最省事。另外如果在 k8s 环境里用 RabbitMQ管理页面的 15672 端口一般通过 Service 暴露很多人配置了 NodePort 却访问不了先检查 Service selector 是否匹配到了 Pod 标签再检查 Ingress 路径是否正确。如果要接入 Prometheus 监控优先启用rabbitmq_prometheus插件它默认提供/metrics接口和官方 Exporter 相比少维护一套组件。再分享一个我个人常用的效率技巧管理页面除了鼠标点击操作还提供了完整的 HTTP API默认就是 15672 端口的 REST 接口可以做很多自动化操作。查队列积压、摘流量、拿节点状态都可以用接口完成比页面点击更适合做脚本巡检。比如想批量获取所有队列的消息积压数curl -s -u admin:admin123 http://localhost:15672/api/queues | jq .[] | {name: .name, messages: .messages, ready: .messages_ready, unacked: .messages_unacknowledged}配合定时任务就能实现消息积压告警的雏形。管理页面的操作能力只是基础灵活用它的 API 能省下大量重复劳动。管理页面看起来只是一个可视化界面但真正用好它核心是建立起一条排查思路先看 Overview 判断节点整体是否健康再通过 Connections 和 Channels 判断连接和通道状态接着去 Queues 看积压和消费情况最后回到 Exchanges 排查路由链路。按这个顺序走一遍大多数消息问题都能定位到具体环节。我个人习惯是页面不够用的时候直接调管理 API 做数据比对消息积压趋势、连接数变化、节点资源消耗放在一起看比单个页面上的瞬时数值可靠得多。
返回列表