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

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

  • 阿帕奇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捕获三种不同类别的信息:

  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名称。

然后,看一下第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

使用JMSTester对JMS层进行基准测试相关推荐

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

    jms 如何测试 对于我去过的大多数客户端,使用ActiveMQ扩展JMS消息传递层是一个优先事项. 有多种方法可以实现这一目标,但毫无疑问,创建基准并分析实际硬件上的体系结构(或者正如我的同事Gar ...

  2. jboss hornetq jms 用户文档

    HornetQ 2.1用户手册 Putting the buzz in messaging Table of Contents 1. 法律声明 2. 前言 3. 项目信息 3.1. 软件下载 3.2. ...

  3. java笔试题_Java面试才到笔试就没有然后了?快来签收,高频笔试57题及解答

    前言 很多人面试之前,可能没有在互联网公司工作过或者说工作过但年头较短,不知道互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,甚至笔试都过不了 ...

  4. 亚信科技笔试java

    亚信科技笔试java base上海 选择题有java基础.jsp.web.linux.数据结构 1. java的核心包 2. 字符串拼接 3. 实现Runable接口,run方法和start方法 4. ...

  5. 软考-测试评测师(两版目录对比)

    第二版目录-详情 第二版     第一篇 基础理论篇         第 1 章 软件测试概述  2             1.1 软件测试的背景  2             1.2 软件错误相关 ...

  6. IBM全内置服务器的发展历程

    全内置 服务器 的雏形-IBM system/38 1970年AS/400体系结构(一种全内置服务器体系结构)首次在Frank Soltis 的博士论文中提出.  1978年 推出IBM System ...

  7. Java常见的spring笔试选择题

    Java常见的spring笔试选择题 1.Spring DAO 中最常用的类是() A,JdbcTemplate ,SimpleJdbcTemplate B,SimpleJdbcInsert,Simp ...

  8. deep compression:compressing deep neural networks with pruning,trained quantization and huffman codi

    deep compression:compressing deep neural networks with pruning,trained quantization and huffman codi ...

  9. 七层网络性能基准测试中的协调遗漏问题--Coordinated Omission

    前言 在讲述这个问题之前首先我们先要搞清楚七层网络测试协议的几个关键性性能测试指标和通用的关系模型.其次搞清楚四层协议,七层协议中性能测试给出的时延讲述的是个什么东西.最后讲述为什么大部分的性能测试工 ...

最新文章

  1. 解决掉这些痛点和难点,让知识图谱不再是“噱头”
  2. css实现横向进度条和竖向进度条
  3. DICOM医学图像处理:Dcmtk与fo-dicom保存文件的不同设计模式之“同步VS异步”+“单线程VS多线程”...
  4. switch…case语句注意事项
  5. Facebook190亿美元收购WhatsApp
  6. Kafka基本概念与术语
  7. 用R语言实现对不平衡数据的四种处理方法
  8. $timeout、$interval和$watch用法
  9. Android 11 system_server 读写 SDCARD
  10. java 读取word页码
  11. 电脑一键装机下载重装系统详细教程
  12. 城市地铁是怎样建成的?
  13. 前后端分离-电商项目
  14. 网络知识入门,什么是以太网包,TCP/IP包,MAC头部,IP头部以及TCP头部(六)
  15. C#之控制台RPG类魔塔游戏
  16. 使用three.js模拟地球效果
  17. SDJZU_新生_递推动规_HDU 2084 数塔
  18. 整数分数计算机,整数减分数怎么算
  19. 第 15 章 Admonition 警告与提示
  20. python 分解变量

热门文章

  1. 请求nginx静态资源报403
  2. MySQL存储过程+游标+触发器
  3. DFS应用——寻找欧拉回路
  4. 快速排序算法思想及实现
  5. jmx 替代_使用JMX作为Ganglia的现代替代品进行CLDB监视
  6. 对象容器设计模式_容器对象模式。 一种新的测试模式。
  7. lambda设计模式_使用lambda的装饰器设计模式
  8. 从Java应用程序中消除Null指针异常
  9. 基于drools_Drools:基于PHREAK堆栈的评估和向后链接
  10. 使用JCache缓存方法结果