如果您有一些好的经验,请在评论中让我知道。 我能想到的项目:
- 阿帕奇Jmeter
- ActiveMQ性能插件
- FuseSource JMSTester
- Hiram Chirino的jms基准
在与Gary谈谈为ActiveMQ设置测试方案时,他回忆起一个非常有趣的项目,似乎停滞在名为JMSTester的FuseSource 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捕获三种不同类别的信息:
- 基本:每个使用者的邮件数,邮件大小
- JMX:在测试运行时监视代理上的所有JMX属性,包括线程数,队列大小,入队时间等
- 机器: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统计信息。 统计信息将被发送回控制器主机上的记录器,如上面“记录器”部分所述。 Producer和Consumer容器将在分别命名为Producer和Consumer的单独机器上运行。 最后, Controller主机将具有分布式测试的Controller和Recorder组件。
最初设定
在将要参与基准测试的每台计算机上下载并提取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名称。
然后,看一下第169行,其中指定了AMQDestinationProbe。 该探针是针对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