如果您有一些好的經驗,請在評論中讓我知道。 我能想到的項目:
- 阿帕奇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