固定吞吐量定時器和指定集合點,都是使用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以及最新版本。
參考: