固定吞吐量定時器和指定集合點,都是使用JMeter進行效能測試的常用手段,但是通過對測試過程的監控和測試結果的分析,都是在效能測試中值得關注部分。
JMeter也可以監控伺服器的效能引數,如:CPU、記憶體、IO等,不過需要下載一些外掛。
本文主要說明如何通過JMeter外掛,來監控伺服器CPU、記憶體、磁碟、網路等相關資源。
1、監控外掛安裝
(1)需要安裝的外掛
JMeter對伺服器的監控,需要如下外掛包:
JmeterPlugins-Extras.zip
JmeterPlugins-Standard.zip
ServerAgent-2.2.1.zip
提示:
JMeter外掛下載地址:https://jmeter-plugins.org/downloads/old
JmeterPlugins-Extras.zip
和JmeterPlugins-Standard.zip
都可以通過上面連結下載。ServerAgent-2.2.1.zip
,需要通過其他途徑下載。
(2)安裝外掛方式
外掛包裡面說明文件中的提示:
# 安裝使用
Installation and Usage
# 只需將 JAR 檔案複製到 JMeter 的 lib/ext 目錄中即可。
Just copy the JAR file into JMeter's lib/ext directory.
# 然後您可以啟動 JMeter 並向您的測試計劃新增其他專案。
Then you can start JMeter and add additional items to your Test Plan.
# 需要 Java 1.6 版和 JMeter 2.4。
Java version 1.6 and JMeter 2.4 are required.
所以我們需要操作的步驟:
- 將
JMeterPlugins-Extras-1.4.0.zip
檔案解壓,找到lib/ext
資料夾裡的JMeterPlugins-Extras.jar
,放到JMeter安裝目錄的lib/ext
目錄裡面。 - 同理,將
JMeterPlugins-Standard-1.4.0.zip
解壓,找到lib/ext
下的JMeterPlugins-Standard.jar
,放到JMeter安裝目錄的lib/ext
目錄裡面。
完成上面步驟後,我們啟動JMeter,如果已啟動JMeter,需要進行重啟。
執行操作:測試計劃 —> 右鍵新增 —> 監聽器,可以看到監聽器中多了一些東西,看到這些jp@gc
開頭的元件則表明外掛已生效。
如下圖所示:
(3)常用元件簡要介紹
jp@gc - Bytes Throughput Over Time
:不同時間吞吐量展示(圖表) 。
聚合報告裡,Throughput
是按請求個數來展示的,比如說1.9/sec
,就是每秒傳送1.9個請求。而這裡的展示是按位元組Bytes來展示的圖表。jp@gc - Composite Graph
:混合圖表。在它的Graphs
裡面可以設定多個圖表一起展示,它可以同時展示多個圖表。jp@gc - Hits per Second
:每秒點選量。jp@gc - PerfMon Metrics Collector
:伺服器效能監測控制元件,包括CPU
,Memory
,Network
,I/O
等等。jp@gc - Reponse Latencies Over Time
:記錄客戶端傳送請求完成後,伺服器端返回請求之前這段時間。jp@gc - Reponse Times Distribution
:顯示測試的響應時間分佈,X
軸顯示由時間間隔分組的響應時間,Y
軸包含每個區間的樣本數。jp@gc - Transactions per Second
:每秒事務數,伺服器每秒處理的事務數。jp@gc - Reponse Times vs Threads
:展示事務響應時間與虛擬使用者數之前的對應關係。
2、啟動監控服務
(1)在Linux系統中
將ServerAgent-2.2.1
檔案上傳到需要監控伺服器上,執行命令:ServerAgent-2.2.1\bin\startAgent.sh
,來啟動ServerAgent
服務,預設埠4444。
如下所示:
# 1.檢視當前所在路徑,和路徑下的檔案
[root@localhost ServerAgent-2.2.1]# pwd
/usr/local/ServerAgent-2.2.1
[root@localhost ServerAgent-2.2.1]# ll
總用量 172
-rw-r--r--. 1 root root 10821 6月 8 11:20 CMDRunner.jar
drwxr-xr-x. 2 root root 4096 6月 8 11:20 lib
-rw-r--r--. 1 root root 85433 6月 8 11:20 LICENSE
-rw-r--r--. 1 root root 62848 6月 8 11:20 ServerAgent.jar
-rw-r--r--. 1 root root 63 6月 8 11:20 startAgent.bat
-rw-r--r--. 1 root root 74 6月 8 11:20 startAgent.sh
# 2.賦予startAgent.sh檔案執行許可權
[root@localhost ServerAgent-2.2.1]# chmod +x startAgent.sh
[root@localhost ServerAgent-2.2.1]# ll
總用量 172
-rw-r--r--. 1 root root 10821 6月 8 11:20 CMDRunner.jar
drwxr-xr-x. 2 root root 4096 6月 8 11:20 lib
-rw-r--r--. 1 root root 85433 6月 8 11:20 LICENSE
-rw-r--r--. 1 root root 62848 6月 8 11:20 ServerAgent.jar
-rw-r--r--. 1 root root 63 6月 8 11:20 startAgent.bat
-rwxr-xr-x. 1 root root 74 6月 8 11:20 startAgent.sh
# 3.啟動startAgent服務
[root@localhost ServerAgent-2.2.1]# ./startAgent.sh
INFO 2021-06-08 11:21:45.863 [kg.apc.p] (): Binding UDP to 4444
INFO 2021-06-08 11:21:47.073 [kg.apc.p] (): Binding TCP to 4444
INFO 2021-06-08 11:21:47.090 [kg.apc.p] (): JP@GC Agent v2.2.0 started
提示:
在Linux系統中執行命令
./startAgent.sh
時,可能會提示:-bash: ./startAgent.sh: 許可權不夠
,那麼我們需要執行命令:chmod +x startAgent.sh
或者chmod 777 startAgent.sh
,給startAgent.sh
檔案賦予執行許可權。
(2)在Windows系統中
在Windows伺服器中啟動startAgent.bat
檔案即可。
預設埠為4444,也可以引數指定 –udp-port 4445 –tcp-port 4445
。
如下圖所示:
(在伺服器中的任何目錄中啟動都可以)
(3)JMeter相關配置
我們可以修改bin/jmeter.properties
檔案中的一些配置項,把有關係jmeterplugins和thread的屬性項都開啟。
例如:jmeter.save.saveservice.thread_counts=true
,表示如果沒有把thread_count
這個引數開啟,是不會記錄到執行緒有關的資訊的。
不配置也沒有問題,能夠根據自己實際需求配置,那自然是最好的,這些都需要我們在之後的日常工作中,慢慢的積累總結。
(4)總結
JMeterPlugins-Standard
外掛和JMeterPlugins-Extras
外掛相當於是客戶端。
ServerAgent
相當於是服務端。
3、使用JMeter監控伺服器
(1)測試計劃內包含的元件
新增元件操作步驟:
- 建立測試計劃。
- 建立執行緒組:
選中“測試計劃”右鍵 —> 新增 —> 執行緒(使用者) —> 執行緒組
。 - 線上程組下,新增取樣器“HTTP請求”元件:
選中“執行緒組”右鍵 —> 新增 —> 取樣器 —> HTTP請求
。 - 線上程組下,新增定時器“固定吞吐量定時器”元件:
選中“執行緒組”右鍵 —> 新增 —> 定時器 —> 固定吞吐量定時器
。
最終測試計劃中的元件如下:
點選執行按鈕,會提示你先儲存該指令碼,指令碼儲存完成後會直接自動執行該指令碼。
(2)HTTP請求介面內容
任何取樣器請求都可以,我這裡就以一個登陸請求為例了。
編寫內容如下圖:
(3)配置jp@gc-PerfMon Metrics Collector
元件
在jp@gc-PerfMon Metrics Collector
元件中,新增要監控的伺服器地址,和埠號。
埠預設為4444,該埠號要與待監控伺服器上的ServerAgent
服務的埠一樣。
最後選擇在被監控伺服器中收集哪些資源的指標。
如下圖所示:
對jp@gc-PerfMon Metrics Collector
元件簡單介紹:
- 名稱:
jp@gc-PerfMon Metrics Collector
元件的自定義名稱,見名知意最好。 - 註釋:即新增一些備註資訊,對該
jp@gc-PerfMon Metrics Collector
元件的簡短說明,以便後期回顧時檢視。 Servers to Monitor (ServerAgent must be started, see help)
:設定要監控的伺服器(必須啟動 ServerAgent服務)Host/IP
:填寫被監控伺服器的主機IP地址或者域名。Port
:被監控伺服器上啟動的ServerAgent
服務的埠。Metric to collect
:選擇被監控伺服器上要收集的指標。Add Row
:新增一個監控設定。Copy Row
:複製一條監控設定。Delete Row
:刪除一條監控設定。
- 所有資料寫入一個檔案:這個部分的操作前面說過很多次了。就是可以把JMeter指令碼執行過程中,請求產生的內容,儲存到一個檔案中。也可以設定把請求中的哪些內容儲存到檔案中。
- 最下面是監控結果的圖形化展示。
(4)執行緒組元件配置
如果這時候就執行JMeter指令碼,你會發現Chart
區域並無曲線圖。現象是成功連線然後立刻斷開了,並沒有獲取我們想要的曲線圖。
原因是因為執行緒組只執行一次,若使其能夠獲取一段時間的資料,在Chart
區域就能顯示出對應的曲線圖了。
我們需要將執行緒組元件的:
- 迴圈次數:勾選為”永遠”;
- 勾選排程器:置指令碼持續跑多長時間。
如下圖所示:
簡單說明:
- 執行緒數:就是併發數,目標100採取疊加的方式去進行新增。
- 啟動時間:每秒啟動多少個(可以根據結果去進行調整)。策略:想要伺服器壓力大點就時間少點,想要伺服器的壓力慢慢增加就時間長點。
- 迴圈次數:表示每一個執行緒跑幾次。指定次數or永遠(跟下面的持續時間配合使用)。
- 排程器:配合永遠使用,去設定持續時間。
示例:設定執行緒數100,勾選永遠,就會一直執行,但排程器中持續時間設定時間,就是在這段時間內,這100個使用者一直執行。
(5)檢視監控結果
執行指令碼,檢視監控結果。
我們回到jp@gc-PerfMon Metrics Collector
元件介面中,可以看到Chart
選項頁中,如下圖所示:
從上圖中我們可以看到,在指令碼執行的過程中,伺服器的CPU、記憶體、磁碟IO、網路IO的一個使用情況,都可以通過JMeter進行監控了。
提示:圖表可匯出成
.csv
檔案,配合聚合報告,分析伺服器效能狀況。
說明:
1)在Chart
區域右鍵,會出現操作選單
Copy Image to Clipboard
:複製圖片到剪貼簿。Save Image as…
:圖片另存為。Export to CSV
:匯出為CSV格式檔案。
2)Rows
選項頁中可以設定曲線圖中顯示的被監控項
如下圖所示:
3)Settings
選項頁中的設定項
Use relative times
:使用相對時間,預設勾選,顯示為從監控起一段時間內的曲線圖;不勾選則顯示當前系統時間內的曲線圖。Auto-zoom rows for best fit
:自動縮放最佳擬合行,預設勾選,不建議取消勾選。Line width
:線條寬度,預設為1,不建議修改。Draw markers
:畫標記,預設不勾選,勾選後曲線轉折點被標記。Paint gradient
:顏色梯度,預設勾選。Limitnumber of points in row to [] points
:行的極限點數,預設不勾選。Force maximum Y axis value to []
:Y軸最大值,預設不勾選。
4、遇到的問題
在執行JMeter指令碼的時候,出現java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/text/DateFormat;)V
報錯。
在JMeter日誌檢視器皮膚,出現如下所示:
2021-06-08 00:11:48,093 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2021-06-08 00:11:48,093 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2021-06-08 00:11:48,095 ERROR o.a.j.JMeter: Uncaught exception:
java.lang.NoSuchMethodError: org.apache.jmeter.samplers.SampleSaveConfiguration.setFormatter(Ljava/text/DateFormat;)V
at kg.apc.jmeter.JMeterPluginsUtils.doBestCSVSetup(JMeterPluginsUtils.java:272) ~[JMeterPlugins-Extras.jar:?]
at kg.apc.jmeter.perfmon.PerfMonCollector.setupSaving(PerfMonCollector.java:140) ~[JMeterPlugins-Standard.jar:?]
at kg.apc.jmeter.perfmon.PerfMonCollector.testStarted(PerfMonCollector.java:117) ~[JMeterPlugins-Standard.jar:?]
at org.apache.jmeter.reporters.ResultCollector.testStarted(ResultCollector.java:350) ~[ApacheJMeter_core.jar:5.0 r1840935]
at kg.apc.jmeter.vizualizers.CorrectedResultCollector.testStarted(CorrectedResultCollector.java:28) ~[JMeterPlugins-Extras.jar:?]
at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfStart(StandardJMeterEngine.java:215) ~[ApacheJMeter_core.jar:5.0 r1840935]
at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:384) ~[ApacheJMeter_core.jar:5.0 r1840935]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]
原因:
是因為JMeterPlugins-Extras-1.4.0
外掛和JMeterPlugins-Standard-1.4.0
外掛,遇到高版本JMeter會出現相容問題。
解決辦法兩種:
1)使用JMeter3.1版本,搭配JMeter的外掛Extras1.4.0
和Standard -plugin1.4.0
使用。只支援JMeter以下版本3.2,不包括3.2版本!!!
2)使用jmeter-plugin-manager
(JMeter外掛管理器)
直接下載所需要的PerfMon (Servers Performance Monitoring)
元件。
先在Avaliable Plugins
搜尋PerfMon
,進行勾選需要安裝的外掛。
再ApplyChanges and Restart jmeter
按鈕進行安裝。
此種方式安裝的PerfMon
外掛為2.1version
,解決了JMeter版本過高,導致監控外掛不相容的問題。
如下圖所示:
提示:這種方式比較推薦,畢竟高版本修復了很多問題,此方法安裝的
jp@gc -PerfMon Metrics Collector
外掛監控,支援到JMeter5.1以及最新版本。
參考: