『動善時』JMeter基礎 — 61、使用JMeter監控伺服器

繁華似錦Fighting發表於2021-12-31

固定吞吐量定時器和指定集合點,都是使用JMeter進行效能測試的常用手段,但是通過對測試過程的監控和測試結果的分析,都是在效能測試中值得關注部分。

JMeter也可以監控伺服器的效能引數,如:CPU、記憶體、IO等,不過需要下載一些外掛。

本文主要說明如何通過JMeter外掛,來監控伺服器CPU、記憶體、磁碟、網路等相關資源。

1、監控外掛安裝

(1)需要安裝的外掛

JMeter對伺服器的監控,需要如下外掛包:

  1. JmeterPlugins-Extras.zip
  2. JmeterPlugins-Standard.zip
  3. ServerAgent-2.2.1.zip

提示:

JMeter外掛下載地址:https://jmeter-plugins.org/downloads/old

  • JmeterPlugins-Extras.zipJmeterPlugins-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.

所以我們需要操作的步驟:

  1. JMeterPlugins-Extras-1.4.0.zip檔案解壓,找到lib/ext資料夾裡的JMeterPlugins-Extras.jar,放到JMeter安裝目錄的lib/ext目錄裡面。
  2. 同理,將JMeterPlugins-Standard-1.4.0.zip解壓,找到lib/ext下的JMeterPlugins-Standard.jar,放到JMeter安裝目錄的lib/ext目錄裡面。

完成上面步驟後,我們啟動JMeter,如果已啟動JMeter,需要進行重啟。

執行操作:測試計劃 —> 右鍵新增 —> 監聽器,可以看到監聽器中多了一些東西,看到這些jp@gc開頭的元件則表明外掛已生效。

如下圖所示:

image

(3)常用元件簡要介紹

  1. jp@gc - Bytes Throughput Over Time:不同時間吞吐量展示(圖表) 。
    聚合報告裡,Throughput是按請求個數來展示的,比如說1.9/sec,就是每秒傳送1.9個請求。而這裡的展示是按位元組Bytes來展示的圖表。
  2. jp@gc - Composite Graph:混合圖表。在它的Graphs裡面可以設定多個圖表一起展示,它可以同時展示多個圖表。
  3. jp@gc - Hits per Second:每秒點選量。
  4. jp@gc - PerfMon Metrics Collector:伺服器效能監測控制元件,包括CPUMemoryNetworkI/O等等。
  5. jp@gc - Reponse Latencies Over Time:記錄客戶端傳送請求完成後,伺服器端返回請求之前這段時間。
  6. jp@gc - Reponse Times Distribution:顯示測試的響應時間分佈,X軸顯示由時間間隔分組的響應時間,Y軸包含每個區間的樣本數。
  7. jp@gc - Transactions per Second:每秒事務數,伺服器每秒處理的事務數。
  8. 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

如下圖所示:

image

(在伺服器中的任何目錄中啟動都可以)

(3)JMeter相關配置

我們可以修改bin/jmeter.properties檔案中的一些配置項,把有關係jmeterplugins和thread的屬性項都開啟。

例如:jmeter.save.saveservice.thread_counts=true,表示如果沒有把thread_count這個引數開啟,是不會記錄到執行緒有關的資訊的。

不配置也沒有問題,能夠根據自己實際需求配置,那自然是最好的,這些都需要我們在之後的日常工作中,慢慢的積累總結。

(4)總結

JMeterPlugins-Standard外掛和JMeterPlugins-Extras外掛相當於是客戶端。

ServerAgent相當於是服務端。

3、使用JMeter監控伺服器

(1)測試計劃內包含的元件

新增元件操作步驟

  1. 建立測試計劃。
  2. 建立執行緒組:選中“測試計劃”右鍵 —> 新增 —> 執行緒(使用者) —> 執行緒組
  3. 線上程組下,新增取樣器“HTTP請求”元件:選中“執行緒組”右鍵 —> 新增 —> 取樣器 —> HTTP請求
  4. 線上程組下,新增定時器“固定吞吐量定時器”元件:選中“執行緒組”右鍵 —> 新增 —> 定時器 —> 固定吞吐量定時器

最終測試計劃中的元件如下:

image

點選執行按鈕,會提示你先儲存該指令碼,指令碼儲存完成後會直接自動執行該指令碼。

(2)HTTP請求介面內容

任何取樣器請求都可以,我這裡就以一個登陸請求為例了。

編寫內容如下圖:

image

(3)配置jp@gc-PerfMon Metrics Collector元件

jp@gc-PerfMon Metrics Collector元件中,新增要監控的伺服器地址,和埠號。

埠預設為4444,該埠號要與待監控伺服器上的ServerAgent服務的埠一樣。

最後選擇在被監控伺服器中收集哪些資源的指標。

如下圖所示:

image

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區域就能顯示出對應的曲線圖了。

我們需要將執行緒組元件的:

  1. 迴圈次數:勾選為”永遠”;
  2. 勾選排程器:置指令碼持續跑多長時間。

如下圖所示:

image

簡單說明:

  • 執行緒數:就是併發數,目標100採取疊加的方式去進行新增。
  • 啟動時間:每秒啟動多少個(可以根據結果去進行調整)。策略:想要伺服器壓力大點就時間少點,想要伺服器的壓力慢慢增加就時間長點。
  • 迴圈次數:表示每一個執行緒跑幾次。指定次數or永遠(跟下面的持續時間配合使用)。
  • 排程器:配合永遠使用,去設定持續時間。

示例:設定執行緒數100,勾選永遠,就會一直執行,但排程器中持續時間設定時間,就是在這段時間內,這100個使用者一直執行。

(5)檢視監控結果

執行指令碼,檢視監控結果。

我們回到jp@gc-PerfMon Metrics Collector元件介面中,可以看到Chart選項頁中,如下圖所示:

image

從上圖中我們可以看到,在指令碼執行的過程中,伺服器的CPU、記憶體、磁碟IO、網路IO的一個使用情況,都可以通過JMeter進行監控了。

提示:圖表可匯出成.csv檔案,配合聚合報告,分析伺服器效能狀況。

說明:

1)在Chart區域右鍵,會出現操作選單

  • Copy Image to Clipboard:複製圖片到剪貼簿。
  • Save Image as…:圖片另存為。
  • Export to CSV:匯出為CSV格式檔案。

2)Rows選項頁中可以設定曲線圖中顯示的被監控項

如下圖所示:

image

3)Settings選項頁中的設定項

  1. Use relative times:使用相對時間,預設勾選,顯示為從監控起一段時間內的曲線圖;不勾選則顯示當前系統時間內的曲線圖。
  2. Auto-zoom rows for best fit:自動縮放最佳擬合行,預設勾選,不建議取消勾選。
  3. Line width:線條寬度,預設為1,不建議修改。
  4. Draw markers:畫標記,預設不勾選,勾選後曲線轉折點被標記。
  5. Paint gradient:顏色梯度,預設勾選。
  6. Limitnumber of points in row to [] points:行的極限點數,預設不勾選。
  7. 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.0Standard -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版本過高,導致監控外掛不相容的問題。

如下圖所示:

image

提示:這種方式比較推薦,畢竟高版本修復了很多問題,此方法安裝的jp@gc -PerfMon Metrics Collector外掛監控,支援到JMeter5.1以及最新版本。

參考:

相關文章