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

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

JMeter也可以監控伺服器的性能參數,如:CPU、記憶體、IO等,不過需要下載一些插件。

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

1、監控插件安裝

(1)需要安裝的插件

JMeter對伺服器的監控,需要如下插件包:

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

提示:

JMeter插件下載地址://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以及最新版本。

參考: