Linux下MQ性能压测脚本及压测方案

成功的脚本压测图:
在这里插入图片描述

一、MQ性能压测脚本准备

Rocket官方源码提供的有代码——benchmark,详见下图。mq官方下载
在这里插入图片描述
源码见图:
在这里插入图片描述
打包项目为jar包
此处做个打包讲解吧。最推荐方式:
在这里插入图片描述

  <build>
        <!-- 打包后的名字 -->
        <finalName>benchmark-1.0-SNAPSHOT-consumer</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <!-- 指定程序入口 (需要注意的地方)-->
                        <mainClass>org.apache.rocketmq.Consumer</mainClass>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
<!--        </pluginManagement>-->
    </build>

其他的如点击或自行百度吧,不过都没这个简单哈。有工具用就要学会发挥其作用,不要一味地追求没效率的学习。
接下来就是在linux虚机中编写脚本运行这个代码了。
下方的脚本编写比较简单,重点学习一下 java -jar 和java -cp的不同。前半部分都是jvm调优,启动参数,重点就最后一行。

期间遇见的问题:

问题一:找不到主类

在这里插入图片描述
解决方案和知识点:

if [ -z "$JAVA_HOME" ]; then
  JAVA="java"
else
  JAVA="$JAVA_HOME/bin/java"
fi

# Memory options
if [ -z "$ROCKETMQ_HEAP_OPTS" ]; then
  ROCKETMQ_HEAP_OPTS="-Xmx256M"
fi

# JVM performance options
if [ -z "$ROCKETMQ_JVM_PERFORMANCE_OPTS" ]; then
  ROCKETMQ_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+DisableExplicitGC -Djava.awt.headless=true"
fi

exec $JAVA $ROCKETMQ_HEAP_OPTS $ROCKETMQ_JVM_PERFORMANCE_OPTS -jar benchmark-1.0-SNAPSHOT.jar "$@"
exec java -jar benchmark-1.0-SNAPSHOT.jar "$@"

和下方的做下区别。

exec java -cp benchmark-1.0-SNAPSHOT.jar org.apache.rocketmq.Producer "$@"

核心区别:
在这里插入图片描述

如果再遇见,Error: Could not find or load main class *** 那就看看包名正确否,路径是相对路径还是绝对路径,都不行自行百度解决吧,或者就换方式吧直接使用java -jar 不使用java -cp。

参考链接: https://blog.csdn.net/weixin_38653290/article/details/84647019
https://blog.csdn.net/abcdu1/article/details/86693800

问题二:脚本执行失败**

在这里插入图片描述
解决方案:
在这里插入图片描述
参考链接:
https://blog.csdn.net/u013948858/article/details/79637851

到此处即可使用命令行进行Rocketmq的生产和消费了。

找到安装包进入bin目录:
生产消息正常,使用的是代码中默认的topic:BenchmarkTest -n 集群地址ip:端口
在这里插入图片描述

问题三
此处新问题出现,消费不到数据。均使用的是默认消费组和默认topic

在这里插入图片描述
尝试解决方案:

  1. 命令行明确指定消费者组,不行,查看是否建立成功?结果成功了;
    在这里插入图片描述

  2. 新建新的消费者组和Topic,再次执行消费,还是老问题。
    新建消费者组在这里插入图片描述查看Topic列表
    在这里插入图片描述

  3. 查看消费组情况:
    在这里插入图片描述
    在这里插入图片描述

  4. 没有路由信息,问题明天接着跟踪。两个方向:
    一、在启动mqbroker的时候需要指定 autoCreateTopicEnable=true 验证否,但是还是要根据具体问题分析的。
    二、客户端版本和服务器版本不一致,经验证否
    三、查看官方代码,没有路由信息,外加消费不到数据,那肯定是nameserver的事情了。但是生产没有问题,说明nameserver正常啊,那就是消费脚本问题了。本人使用的是mq 4.5.0源码中的消费代码,你会发现消费代码中并没有设置nameserver地址。尝试修改:

报错信息在这里插入图片描述
在这里插入图片描述

4.7.1版本官方已经修复,点击查看4.7.1消费代码
在这里插入图片描述
此时自己建立的消费者和topic可以了,但是默认的benchmark的还是不行。
在这里插入图片描述

经查阅,消费时想使用默认的消费者组、Topic(BenchmarkTest),请设置(上图中p参数会默认为消费者组名称加后缀,如果是自己建立的消费者组请加参数 -p false):
在这里插入图片描述
在这里插入图片描述
以下内容涉及MQ压测命令或者排查问题的其他命令:

使用默认消费者消费消息需要加-p false
在这里插入图片描述

查看具体消费组消费的topic、消息位移、消费位点、消费客户端ip 、消息积压 Diff、最后消费时间

在这里插入图片描述

生产发送消息
在这里插入图片描述
设置队列数,注意记得同时设置
在这里插入图片描述
在这里插入图片描述
查看nameserver连接的消费者情况,或者某消费者的具体情况
在这里插入图片描述
查看某topic的状态
在这里插入图片描述

创建更新Topic

在这里插入图片描述

查看结果

在这里插入图片描述

发送消息

在这里插入图片描述

压测脚本的返回信息字段解析

生产者返回字段信息
在这里插入图片描述
消费者返回字段信息解析
在这里插入图片描述
消息堆积情况

在这里插入图片描述

插入点容器知识
查看容器的指标:
docker images 查看pod的使用的镜像,登录节点部署所在的主机查找
docker stats 镜像id 在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/8c1b072ea93f41febdc332fa84e43a20.png

容器指标查看完整命令

在这里插入图片描述

压测方案参考文章

mq常用命令

总结做的不错 差一点没考虑,压测脚本会不会是其瓶颈。
在这里插入图片描述

性能测试报告,也有参考之处

压测时候的脚本默认值请参考

在这里插入图片描述

在这里插入图片描述

下方的可以选择不看,这些都是排查问题时候见到的,简单记录下。

这个可以借鉴下此处改的是idea中的配置,想想消费的时候是不是也要配置下nameserver,解决问题请分析问题最终的出处,根据原理一步一步排查,终究会解决的。

这个我倒是没有遇见和复现,有问题的也可以看下这个文章

查看消费组情况的命令

命令行创建Topic
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值