『動善時』JMeter基礎 — 61、使用JMeter監控伺服器
- 2021 年 12 月 31 日
- 筆記
- 測試基礎技能 - JMeter工具
固定吞吐量定時器和指定集合點,都是使用JMeter進行性能測試的常用手段,但是通過對測試過程的監控和測試結果的分析,都是在性能測試中值得關注部分。
JMeter也可以監控伺服器的性能參數,如:CPU、記憶體、IO等,不過需要下載一些插件。
本文主要說明如何通過JMeter插件,來監控伺服器CPU、記憶體、磁碟、網路等相關資源。
1、監控插件安裝
(1)需要安裝的插件
JMeter對伺服器的監控,需要如下插件包:
JmeterPlugins-Extras.zip
JmeterPlugins-Standard.zip
ServerAgent-2.2.1.zip
提示:
JMeter插件下載地址://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以及最新版本。
參考: