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

jms 如何测试

对于我去过的大多数客户端,使用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名称。

然后,看一下指定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 如何测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么待办事项清单不管用

为什么待办事项清单不管用 时间管理 November 22nd, 2012 本文原文来自 Harvard Business Review&#xff0c;由 换装迷宫tayy 翻译。 停止制作你的待办事项清单吧。它们只会让你感觉失败和受挫。想想你正在管理的那些待办清单&#xff1a;有多少事项从年初起就已经在那儿了&…

charts 画饼图

统计某一天某类物体的百分比 新知识点&#xff1a;aggregate https://blog.csdn.net/congcong68/article/details/51619882 主要的 $group $match $sort $limit pipeline [{$group:{_id:$area,count:{$sum:1}}}, # count 是聚合之后新增的一个字段。{$sort:{count:1}}, # …

Apache Camel 2.18 –即将推出的功能的亮点

骆驼骑士正在忙于即将发布的Apache Camel 2.18版本。 当我们动态更新发行说明时 &#xff0c;这是一种快速查看即将发生的情况的方法。 我只是想在夏天在这里进行快速更新&#xff0c;到目前为止&#xff0c;我们已经完成了简短的重点介绍。 随着发行版的临近和文档的完善&…

实时多线程系统的日志实现

实时多线程系统的日志实现 2008-03-21 09:19 黄明/戴颖  软件世界 我要评论(0) 字号&#xff1a;T | T为了分析软件系统在测试和运行期产生的故障&#xff0c;目前大多数软件系统所广泛使用的一种方法就是日志记录。本文给出了利用循环缓冲区和单独的日志读写线程实现实时系统…

Java中获取当前函数名

Java中获取当前函数名 博客分类&#xff1a; Java JavathreadJDKIDEA 有时候我们需要在程序中获取当前运行的函数名&#xff0c;如何简单的做到这点呢&#xff1f;我们可以用getStackTrace轻松搞定。 一提到getStatckTrace多数人会联想到Thowable中的getStackTrace方法。的确&…

建站手册-网站主机:电子商务主机

ylbtech-建站手册-网站主机&#xff1a;电子商务主机1.返回顶部 1、http://www.w3school.com.cn/hosting/host_ecommerce.asp2、2.返回顶部1、如果您的公司正在销售某种产品或服务&#xff0c;那么电子商务也许是做生意的一种好办法。 Internet 商业 电子商务就是在 Internet 上…

ConcurrentLinkedQueue

ConcurrentLinkedQueue 因为ConcurrentLinkedQueue是线程序安全的并且是针对并发的 主类 Java代码 public class conn{ public static void main(String[] args) throws Exception{ Queue<String> queuenew ConcurrentLinkedQueue<String>(); …

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

每天学习一点点 编程PDF电子书、视频教程免费下载&#xff1a;http://www.shitanlife.com/code一、反向代理&#xff1a;Web服务器的“经纪人” 1.1 反向代理初印象 反向代理&#xff08;Reverse Proxy&#xff09;方式是指以代理服务器来接受internet上的连接请求&#xff0c;…

STM32-RS485通信软硬件实现

OS&#xff1a;Windows 64 Development kit&#xff1a;MDK5.14 IDE&#xff1a;UV4 MCU&#xff1a;STM32F103C8T6/VET6 AD&#xff1a;Altium Designer 18.0.12 1、RS485简介  RS-485又名TIA-485-A, ANSI/TIA/EIA-485或TIA/EIA-485。RS485是一个定义平衡数字多点系统中的驱动…

Java 枚举7常见种用法

DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能&#xff0c;却给我的开发带来了“大”方便。 用法一&#xff1a;常量 在JDK1.5 之前&#xff0c;我们定义常量都是&#xff1a; publicstaticfianl....。现在好了&#xff0c;有了枚举&#xff0c;可以把相关的常…

深度学习训练数据打标签过程

深度学习训练数据打标签过程 为了获取大量的图片训练数据&#xff0c;在采集数据的过程中常用视频的方式采集数据&#xff0c;但对于深度学习&#xff0c;训练的过程需要很多的有有标签的数据&#xff0c;这篇文章主要是解决视频文件转换成图片文件&#xff0c;并加标签&#x…

Python中转换角度为弧度的radians()方法

Python中转换角度为弧度的radians()方法 这篇文章主要介绍了Python中转换角度为弧度的radians()方法,是Python入门中的基础知识,需要的朋友可以参考下 radians()方法把角度转化为弧度角x。 语法 以下是radians()方法的语法&#xff1a; radians(x) 注意&#xff1a;此函数是无…

如何招聘一个合格的程序员?

如何招聘一个合格的程序员&#xff1f; 发表于2012-12-03 16:29| 11559次阅读| 来源TheNextWeb| 23 条评论| 作者张祺 招聘程序员摘要&#xff1a;作者是ApeForest和ContentForest网站联合创始人Pravin Daryani。他在创办网站过程中&#xff0c;学习到了非常宝贵的经验教训。如…

JAXB和Log4j XML配置文件

Log4j 1.x和Log4j 2.x均支持使用XML文件来指定日志记录配置 。 这篇文章探讨了与使用JAXB通过Java类处理这些XML配置文件相关的一些细微差别。 本文中的示例基于Apache Log4j 1.2.17 &#xff0c; Apache Log4j 2.6.2和Java 1.8.0_73&#xff08;带有JAXB xjc 2.2.8-b130911.18…

(转载)浅谈线段树

浅谈线段树 数据结构——线段树 O、引例 A.给出n个数&#xff0c;n<100&#xff0c;和m个询问&#xff0c;每次询问区间[l&#xff0c;r]的和&#xff0c;并输出。 一种回答&#xff1a;这也太简单了&#xff0c;O&#xff08;n&#xff09;枚举搜索就行了。 另一种回答&…

双显示器设置:如何设置一台电脑两个显示器

双显示器设置&#xff1a;如何设置一台电脑两个显示器 -来源&#xff1a;互联网 作者&#xff1a;佚名 时间&#xff1a;04-11 09:00:18 【大 中 小】 点评&#xff1a;双显示器设置,如何设置一台电脑两个显示器&#xff1a;一般来说一台电脑通常只配一个显示器&#xff0c;在我…

结对第二次作业

题目要求 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子&#xff0c;请实现它&#xff0c;要求&#xff1a; 能够自动生成四则运算练习题可以定制题目数量用户可以选择运算符用户设置最大数&#xff08;如十以内、百以内等&#xff09;用户选择是否有括号、…

Spy++原理初探

Spy原理初探 http://www.vckbase.com/index.php/wv/1480.html文章概要&#xff1a;用Visual Studio搞开发的朋友对Spy这个工具一定不陌生&#xff0c;它可以分析窗体结构、进程和窗口消息&#xff0c;对开发工作有很大辅助作用。我们需要研究某个对象时&#xff0c;只要调出其…

微信小程序的scroll-view组件

scroll-view为滚动视图&#xff0c;共有水平滚动和垂直滚动两种使用竖向滚动时&#xff0c;需要给<scroll-view/>一个固定高度&#xff0c;通过 WXSS 设置 height。index.wxss 是页面的结构文件&#xff1a;<!--垂直滚动--> <view class"section">…

5个常见的Hibernate异常及其解决方法

了解如何使用Hibernate轻松解决最常见的问题 Hibernate可能是市场上最受欢迎的JPA实现&#xff0c;您可以在许多地方看到它&#xff0c;例如&#xff1a; 您自己使用过的项目数&#xff0c; 需要Hibernate经验的职位数量&#xff0c;当然还有 互联网上发布的问题和例外数量…