使用JMSTester對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名稱。

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371529.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371529.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371529.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Js引擎解析執行 閱讀筆記

Js引擎解析執行 閱讀筆記 一篇閱讀筆記http://km.oa.com/group/2178/articles/show/145691?kmrefsearch&from_page1&no1 早期:遍歷語法樹 Js引擎最早使用的是遍歷語法樹方式 &#xff08;syntax tree walker&#xff09; 分為兩步 詞法分析語法分析詞法分析 i a b *…

紅外線遙控c語言程序,紅外遙控的C程序

紅外遙控在生產和生活中應用越來越廣泛,不同的紅外遙控芯片有不同的發碼協議,但一般都是由引導碼,系統碼,鍵碼三部分組成.引導碼是告訴接收機準備接收紅外遙控碼.系統碼是識別碼,不同的遙控芯片有不同的誤別碼,以免搞錯.遙控器上不同的按鍵有不同的鍵碼,系統碼和鍵碼都是16位碼…

Retrofit2 完全解析 探索與okhttp之間的關系

轉載請標明出處&#xff1a; http://blog.csdn.net/lmj623565791/article/details/51304204&#xff1b; 本文出自:【張鴻洋的博客】 之前寫了個okhttputils的工具類&#xff0c;然后有很多同學詢問這個工具類和retrofit什么區別&#xff0c;于是上了下官網&#xff0c;發現其底…

不變性真的意味著線程安全嗎?

我經常閱讀有關“如果對象是不可變的&#xff0c;則它是線程安全的”的文章。 實際上&#xff0c;我從未找到過一篇讓我相信不變的意味著線程安全的文章。 即使是Brian Goetz的Java Concurrency in Practice一書中關于不變性的一本書也沒有完全令我滿意。 在這本書中&#xff0…

c語言設計 數組的知識點,C語言程序設計知識點及示例.pdf

C語言程序設計知識點及示例四川大學錦江學院C語言程序設計知識點及示例知識點1&#xff1a;除了復合語句而外&#xff0c;C語言的語句都以分號結束。示例1&#xff1a;C語言的簡單語句 (非復合語句語句)必須以 結束。參考答案&#xff1a;分號知識點2&#xff1a;目標程序和可執…

移動端知識匯總

參見地址: https://github.com/jtyjty99999/mobileTech 轉載于:https://www.cnblogs.com/duanyue/p/7337789.html

在移動端設置overflow:hidden禁止滾動的解決方法

如果你是將overflow:hidden用在了body上那么不管用&#xff0c;因為移動端是基于touch事件。 兩種解決方法&#xff1a; 1、為html和body同時設置height:100%;overflow:hidden; html, body{height:100%;overflow:hidden; }2、使用touchmove $(document).on(touchmove,function …

單元測試線程代碼的5個技巧

這是一些技巧&#xff0c;說明如何進行代碼的邏輯正確性測試&#xff08;與多線程正確性相對&#xff09;。 我發現本質上有兩種帶有線程代碼的刻板印象模式&#xff1a; 面向任務–許多短期運行的同類任務&#xff0c;通常在Java 5執行程序框架內運行&#xff0c; 面向流程–…

jsp2

D:\Software\Tomcat7\work\Catalina\localhost 是緩存目錄&#xff0c;可以刪掉隱藏域&#xff1a;頁面表單中的一個元素&#xff0c;跟文本框一樣&#xff0c;但是用戶看不到1.建立test1--form表單需要它&#xff0c;而不需要用戶看到&#xff0c;用隱藏域<body><%re…

MongoDB MapReduce 的示例。

// JavaScript source code db.runCommand({mapreduce: "page",map: function Map() {emit(this.title, // how to group{ name: this.name } // associated data point (document));},reduce: function Reduce(key, values) {//reduce用來處理group出來是多條數…

c語言長空格的代碼是什么,c語言中表示空格的是什么代碼?

分析如下&#xff1a;不是所有字符都需要轉義的&#xff0c;空格直接就敲空格&#xff0c;或者使用ASCII碼值賦值為32。空格沒有轉義字符。合法轉義字符如下&#xff1a;\a 響鈴(BEL) 、\b 退格(BS)、\f 換頁(FF)、\n 換行(LF)、\r 回車(CR)、\t 水平制表(HT)、\v 垂直制表(VT)…

使用NoSQL實現實體服務–第1部分:概述

在過去的幾周中&#xff0c;我一直在進行一些研發工作&#xff0c;以了解使用NoSQL數據庫實現實體服務 &#xff08;也稱為數據服務&#xff09;的優勢。 實體服務是托馬斯埃爾&#xff08;Thomas Erl&#xff09;的《服務技術》叢書中提出的服務分類。 它用于描述高度不可知和…

IO注意事項

read()方法返回值為什么是int? 因為字節輸入流可以操作任意類型的文件,比如圖片音頻等,這些文件底層都是以二進制形式的存儲的,如果每次讀取都返回byte,有可能在讀到中間的時候遇到111111111,那么這11111111是byte類型的-1,我們的程序是遇到-1就會停止不讀了,后面的數據就讀不…

c語言用星號輸出沙漏,《算法筆記》學習日記——3.3 圖形輸出

3.3 圖形輸出問題 A: 輸出梯形題目描述輸入一個高度h&#xff0c;輸出一個高為h&#xff0c;上底邊為h的梯形。輸入一個整數h(1<h<1000)。輸出h所對應的梯形。樣例輸入web5樣例輸出數組*********************************************思路這一類的題目都比較簡單&#xf…

JavaOne 2012:101種改進Java的方法-開發人員參與為何如此重要

Bruno Souza &#xff0c; Martijn Verburg和Heather Vancura在希爾頓酒店的大陸宴會廳4中展示了“ 101種改進Java的方法&#xff1a;開發人員參與為何如此重要”。 他們將其分為自己最熟悉的領域。 SouJava的創始人兼協調員 Souza談到了通過用戶組的更大參與。 Verberg也在倫敦…

Java組合實體模式~

組合實體模式用于EJB持久化機制。 組合實體是表示對象圖的EJB實體bean。 當組合實體更新時&#xff0c;內部依賴對象bean將自動更新為由EJB實體bean管理。 以下是組合實體Bean的參與者。 組合實體 - 它是主要的實體bean。 它可以是粗粒度的或可以包含用于持久性目的的粗粒度對象…

python中的一些小知識

在最近學習python中遇到的一些小問題匯總一下&#xff1a; 1.在windows7下安裝python3.5版本時提示安裝不了&#xff0c;缺少ServicePack1. 解決辦法是&#xff0c;打開控制面板\系統和安全\Windows Update&#xff0c;下載和更新計算機安裝&#xff0c;然后卸載以前的python版…

在Java中衡量執行時間– Spring StopWatch示例

有兩種方法可以通過使用System.currentTimeinMillis&#xff08;&#xff09;或通過使用System.nanoTime&#xff08;&#xff09; 來測量Java中經過的執行時間 。 這兩個方法可用于測量 Java中兩個方法調用或事件之間的經過時間或執行時間 。 計算經過的時間是Java程序員要做的…

c語言getch在哪個頭文件,用getch()需要頭文件嗎?

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓#include #include #include "string.h"#includeusing namespace std;struct student{ int num;char name[10];char banji[10];float score[3];struct student *next;};struct student *creat(){struct student *head,*p…

My solution for Git Client Error: Permission denied (publickey)

在使用Git客戶端的過程中遇到的問題以及解決方案分享。 我之前已經安裝Git客戶端并且使用Git開發過公司項目&#xff0c;也已經正確生成PublicKey并且添加到SSH keys on github of my account&#xff0c;但是當我想從github上克隆另一個客戶端push的代碼的時候一直報錯&#x…