zoukankan      html  css  js  c++  java
  • RocketMQ的客户端连接数调查

    RocketMQ版本:3.4.6

    ==问题现象==

    RocketMQ集群的某个topic,在一部分节点上消费有“断层”,这部分数据一致没办法消费。

    ==调查过程==

    一顿操作猛如虎的调查之后发现,

    该Topic的消费者的客户端连接数不正确。

    程序中设置的客户端数明明是4个,

    但是Web页面上显示的是5个。

    OK,如何才能知道这些客户端程序到底是哪些呢?

    看了一下RocketMQ的命令列表,发现里面有一个命令好像有戏。

    用这个命令尝试了一下,果然有效。

    命令:sh /home/hadmin/alibaba-rocketmq/bin/mqadmin consumerConnection -n "10.11.2.4:9876;10.11.2.5:9876" -g face2

    用这个命令可以查看出,这个消费组的客户端是在哪个节点上,占用的端口号是哪个。

    将正常的客户端连接断开(用的Storm消费,把Storm的拓扑kill掉就可以了)

    再次使用这个命令,就可以查看出,到底是哪个程序在捣鬼了。

    发现在10.11.2.9节点上,54681这个端口的java程序启动了一个客户端连接。

    到10.11.2.9上查看一下是哪个程序。

    命令:netstat -anp | grep 54681  查看占用端口的java进程号是43021。

    命令:ps -ef | grep 43021  查看启动这个进程的java程序。

    ==问题结论==

    我们的场景是用Storm来消费RocketMQ。

    但是,在我们kill拓扑的时候,由于storm的原因,

    偶尔会有一些worker不能被kill掉,变成“僵尸进程”

    上述问题中,莫名其妙多出的1个客户端连接就是僵尸进程引起的,

    将上述发现的僵尸进程kill掉之后,问题就解决了。

      

    ==经验教训==

    Storm的拓扑kill之后,建议检查是否有僵尸进程存在。可以写一个shell脚本检查。

  • 相关阅读:
    [Luogu1993] 小K的农场
    [Noip2013] 车站分级
    [Noip2003]加分二叉树
    [Luogu3797] 妖梦斩木棒
    UPC 6616 Small Mulitple
    STL容器之优先队列
    Dijkstra和Floyd算法
    最短路径问题---Dijkstra算法详解
    并查集
    洛谷 P1217
  • 原文地址:https://www.cnblogs.com/quchunhui/p/9486298.html
Copyright © 2011-2022 走看看