jms 如何测试_使用JMSTester对JMS层进行基准测试

jms 如何测试

对于我去过的大多数客户端,使用ActiveMQ扩展JMS消息传递层是一个优先事项。 有多种方法可以实现这一目标,但毫无疑问,创建基准并分析实际硬件上的体系结构(或者正如我的同事Gary Tully所说的“询问机器”)是第一步。 但是,对于创建一套全面的基准测试,您有哪些开源选择?

如果您有一些好的经验,请在评论中让我知道。 我能想到的项目:

在与Gary谈谈为ActiveMQ设置测试方案时,他回忆起一个非常有趣的项目,似乎停滞在名为JMSTesterFuseSource Forge 存储库中 。 他建议我看看它。 我做到了,它的当前功能给我留下了深刻的印象。 它是由前FuseSource顾问Andres Gies创建的,它通过与客户,航班和业余时间黑客的多次迭代而创建。 从那以后,我将接管它,并且我将添加功能,测试,文档,并继续保持它曾经拥有的动力。

但是,即使在我无法发挥自己的创造力之前,我也想与您分享它目前拥有的力量。

目的

该博客文章的目的是对JMSTester工具进行类似教程的介绍。 该工具的目的是提供一个功能强大的基准框架,以创建灵活的分布式JMS测试,同时在进行调整和调整JMS层之前监视/记录对现有数据至关重要的统计信息。

JMSTester主页上的某些文档有些过时,但是描述某些基准的步骤仍然是准确的。 本教程将要求您下载我一直在努力的SNAPSHOT,该文件可在以下位置找到: jmstester-1.1-20120904.213157-5-bin.tar.gz 。 我将很快部署网站的下一个版本,该网站应具有更多的二进制更新版本。 当我这样做时,我将更新这篇文章。

符合JMSTester工具

JMSTester工具只是发送和接收JMS消息的工具。 您可以使用spring上下文配置文件中定义的配置文件来指定要对消息代理施加什么样的负载。 JMSTester允许您定义想要使用的生产者的数量,使用者的数量,连接工厂,JMS属性(事务,会话ack等)等。但是,最酷的部分是可以运行分布在许多计算机上的基准测试。 这意味着您将机器设置为专门充当生产者,并设置其他机器充当消费者。 至于监视和收集用于基准测试的统计信息,JMSTester捕获三种不同类别的信息:

  1. 基本:每个使用者的邮件数,邮件大小
  2. JMX:在测试运行时监视代理上的所有JMX属性,包括线程数,队列大小,入队时间等
  3. 机器:CPU,系统内存,交换,文件系统指标,网络接口,路由/连接表等

他们的Hyperic SIGAR库用于捕获计算机级别的统计信息(第3组),而RRD4J库用于记录统计信息和输出图形。 目前,我认为这些图表非常基础,希望对此进行改进,但是原始数据始终会转储到csv文件中,您可以使用自己喜欢的电子表格软件来创建自己的图表。

建筑

JMSTester工具由以下概念组成:

  • 控制者
  • 客户群
  • 录音机
  • 前端
  • 基准配置

控制者

控制器是基准的组织者。 它跟踪谁对基准命令感兴趣,启动测试,跟踪使用者数量,生产者数量等。基准在没有控制器的情况下无法运行。 对于您感兴趣的人,JMSTester工具的基础体系结构依赖于消息传递,而ActiveMQ是控制器启动的代理,以使其余体系结构正常工作。

客户群

客户端是接受命令的容器,可以模拟生产者消费者或两者的角色,或两者都不起作用(这在以后很有意义)。 您可以根据需要拥有任意数量的客户。 您可以给它们指定唯一的名称,并在基准配置文件中使用它们的名称。 客户端可以在任何地方运行,包括在单独的计算机上或全部在一台计算机上运行。

录音机

客户端分别记录统计信息并将数据发送到记录器。 记录器最终将统计信息整理好,并整理图表,RRD4J数据库和基准csv文件。

前端

前端向控制器发送命令。 现在只有一个命令行前端,但我的意图是包括一个基于Web的前端和一个基于REST的控制器,该控制器可用于运行基准测试。

基准配置

配置文件是Spring上下文文件,用于指定指示控制器和客户端如何运行基准测试的bean。 在这些配置文件中,您还可以指定要捕获的度量标准以及何时将消息加载类型发送给JMS代理。 展望未来,我的目标是改善这些配置文件,包括添加自定义名称空间支持以使配置不再那么冗长。

我们走吧!

JMSTester网站上有一些很好的入门教程:

  • 简单:http://jmstester.fusesource.org/documentation/manual/TutorialSimple.html
  • JMX探针:http://jmstester.fusesource.org/documentation/manual/TutorialProbes.html
  • 分布式:http://jmstester.fusesource.org/documentation/manual/TutorialDistributed.html

它们大多是最新的,但是当我发现错误时,我将继续对其进行更新。

关于分布式教程的唯一一件事,实际上并没有建立分布式示例。 它分离出客户端,但仅在同一台本地主机上。 只需设置几个其他参数即可分发它,我们将在这里介绍。

本教程的体系结构如下:

让我们真正快速地理解该图。

JMS主机将运行两个进程:我们将测试的ActiveMQ代理,以及名为Monitor的JMSTester客户端容器。 容器既不是生产者也不是容器,而是仅用于监视机器和JMX统计信息。 统计信息将被发送回控制器主机上的记录器,如上面“记录器”部分所述。 ProducerConsumer容器将在分别命名为ProducerConsumer的单独机器上运行。 最后, Controller主机将具有分布式测试的ControllerRecorder组件。

最初设定

在将要参与基准测试的每台计算机上下载并提取JMSTester二进制文件。

启动Controller和Recorder容器

在将承载控制器的机器上,导航至$ JMSTESTER_HOME目录,然后键入以下命令以启动控制器和记录器:

./bin/runBenchmark -controller -recorder -springConfigLocations conf/testScripts

请注意,所有内容都必须与上面完全一样键入,包括“ conf / testScripts”上没有尾随空格
在以后的增强中,我将缓解这种特殊性。

启动控制器和记录器后,就应该准备启动其余的客户端了。 控制器启动客户端最终将连接到的嵌入式代理。

启动生产者容器

在将托管生产者的机器上,导航至$ JMSTESTER_HOME目录,然后键入以下命令:

./bin/runBenchmark -clientNames Producer -hostname domU-12-31-39-16-41-05.compute-1.internal

对于-hostname参数,必须指定启动控制器的主机名。 我在上面使用的是Amazon EC2 ,如果您要这样做,则更愿意为主机使用内部DNS名称。

启动使用者容器

对于使用者容器,除了为其提供客户名称“ Consumer”外,您将执行与生产者相同的操作

./bin/runBenchmark -clientNames Consumer -hostname domU-12-31-39-16-41-05.compute-1.internal

同样, -hostname参数应反映正在运行控制器的主机。

在JMS主机上设置ActiveMQ和监视器

设置ActiveMQ不在本文讨论范围之内。
但是您将需要在代理上启用JMX。 只需按照 Apache ActiveMQ网站上的说明进行操作即可

下一部分对于允许机器级别的探测/监视是必需的。 您需要安装SIGAR库。 由于它们的许可证,它们不随JMSTester一起分发,并且它们的JNI库在Maven中不可用。 基本上,您所需要做的就是下载并从此处提取[SIGAR发行版] [sigar-distro],然后将所有库从$SIGAR_HOME/sigar-bin/lib文件夹复制到$ JMSTESTER_HOME / lib文件夹中。

现在,使用针对生产者和消费者的类似命令启动Monitor容器:<

./bin/runBenchmark -clientNames Monitor -hostname domU-12-31-39-16-41-05.compute-1.internal

提交教程测试用例

我们可以从任何计算机上提交测试用例。 我选择从本地计算机上执行此操作。 您会注意到,提交测试用例的计算机未从上方的图中反映出来; 这仅仅是因为我们可以在任何机器上做到。 就像其他命令一样,您仍然需要JMSTester二进制文件。

在运行测试之前,让我们快速看一下指定测试的Spring配置文件。 为此,请在您喜欢的文本编辑器中打开$ JMSTESTER_HOME / conf / testScripts / tutorial / benchmark.xml,最好使用一种对XML文档进行颜色编码的代码,以便于阅读。 该基准文件带有大量注释,这些注释清楚地描述了各个部分。 如果不清楚,请ping我,以便我提供更多详细信息。

在配置中有几个地方,您需要指定自己的值以使此测试成功。 不幸的是,目前这是一个手动过程,但我计划对其进行修复。

看一下JMS代理连接工厂的创建位置。 在这种情况下,将在其中创建ActiveMQ连接工厂(第120和124行)。此处的URL是您在前面的部分之一中启动的ActiveMQ代理的URL。 分发后,其中就有一个EC2主机URL。 您必须指定自己的主机。 同样,如果使用EC2,则首选内部DNS名称。

然后,看一下指定AMQDestinationProbe的第169行。 该探针是针对ActiveMQ的JMX探针。 您必须更改brokerName属性以匹配启动它时命名的代理(通常在代理配置的<broker brokerName='name here'>部分中找到)。

最后,从$ JMSTESTER_HOME目录中,运行以下命令:

./bin/runCommand -command submit:conf/testScripts/tutorial -hostname ec2-107-21-69-197.compute-1.amazonaws.com

同样,请注意,我将-hostname参数设置为运行控制器的主机。 在这种情况下,我们更喜欢EC2的公共DNS,但这将取决于您的环境。

输出量

你有它。 您已将测试用例提交给基准框架。 您应该在每个客户端(生产者,消费者,监视器)以及控制器上看到一些活动。 如果您的测试正常运行,并且所有原始数据和图形均已生成,那么您应该会看到类似于日志记录输出的内容:

Written probe Values to : /home/ec2-user/dev/jmstester-1.1-SNAPSHOT/tutorialBenchmark/benchmark.csv

请注意,所有结果都写入到tutorialBenchmark中 ,该名称是测试的名称,该名称由第18行的Spring配置文件中的BenchmarkId定义:

<property name='benchmarkId' value='tutorialBenchmark'/>

如果您看一看benchmark.csv文件,您将看到收集到的所有统计信息。 收集的本教程的统计信息包括:

  • 邮件数
  • 讯息大小
  • JMX队列大小
  • JMX线程计数
  • SIGAR CpuMonitor
  • SIGAR免费系统内存
  • SIGAR系统总内存
  • SIGAR免费交换
  • SIGAR总掉期
  • SIGAR交换页面
  • SIGAR换页
  • SIGAR磁盘读取(以字节为单位)
  • SIGAR磁盘写入(以字节为单位)
  • SIGAR磁盘读取
  • SGIAR磁盘写入
  • SIGAR Network RX BYTES
  • SIGAR Network RX PACKETS
  • SIGAR Network TX BYTES
  • SIGAR Network RX已删除
  • SiGAR Network TX已删除
  • SIGAR Network RX错误
  • SIGAR Network TX错误

而已

我强烈建议您看一下这个项目。 我已经接手了它,并且会在时间允许的情况下对其进行改进,但是我非常重视关于如何改进它或支持哪些用例的任何想法或建议。 看一下已有的文档,我们将继续添加更多文档。
如果您有问题,或者如上所述无法正常运行,请给我发评论,发电子邮件或在Apache IRC频道中找到我……我通常至少在#activemq和#camel中。

祝您编程愉快,别忘了分享!

参考:Christian Posta Software博客上,使用来自我们JCG合作伙伴 Christian Posta的FuseSource提供的开源JMSTester工具对JMS层进行基准测试


翻译自: https://www.javacodegeeks.com/2012/09/benchmarking-jms-layer-with-jmstester.html

jms 如何测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值