JMeter - Mysql數據庫以及分佈式壓測

JMeter - Mysql數據庫以及分佈式壓測

1.數據庫壓測

1.1 Mysql數據庫壓測基本配置

 之前我們簡單介紹了HTTP請求的相關操作,這裏我們再介紹一下我們接觸比較多的DB數據庫的相關測試操作。
 我們直接在之前20人線程組測試計劃下選擇JDBC Requet
在這裏插入圖片描述
 這裏我們先不介紹這個界面配置,先在添加好的JDBC Requet添加數據庫相關的配置組件。
在這裏插入圖片描述
 這裏我們主要介紹幾個核心配置:

  1. Max Number of connections:最大連接數
  2. MAX wait:最大等待時間
  3. Auto Commit:是否自動提交事務
  4. DataBase URL:數據庫連接地址
  5. JDBC Driver Class:數據庫驅動,根據所對應數據庫選擇
  6. Username:數據庫用戶名
  7. Password:數據庫密碼
    在這裏插入圖片描述
     以這裏我們要測試的Mysql爲例,這裏我們需要添加一個mysql相關jar包,這個是需要注意的,否則運行測試計劃會錯誤。這裏我們可以通過最外層的測試計劃中Library來添加我們驅動jar包,這個jar包相信Java開發的同學都清楚。
    在這裏插入圖片描述
     另外我們在JDBC配置中填的Variable Name of created pool值,需要將其填入在JDBC Request引用配置中,如下圖。另外就是我們需要編寫需要壓測的SQL語句,這裏我們就以簡單的查詢爲例。
    在這裏插入圖片描述
     最後我們添加上查看結果的結果樹。
    在這裏插入圖片描述
     運行測試計劃後,就能看到我們測試的結果啦。
    在這裏插入圖片描述
    在這裏插入圖片描述
     另外再稍微提一句,若是我們需要測試帶有參數的SQL語句。像我們這裏需要查詢ID爲2的書籍信息,我們首先需要修改Query Type爲預編譯的查詢語句,另外就是Parameter valuesParameter types分別填上參數值以及參數類型,若有多個逗號分隔即可。
    在這裏插入圖片描述
    在這裏插入圖片描述

1.2 數據庫測試聚合報告以及JDBC Request配置詳解

 數據庫的測試也可以和我們之前HTTP測試相同,添加一個聚合報告查看更加詳細的測試結果。
在這裏插入圖片描述
 添加聚合報告之後,運行測試可以看到一些我們很熟悉的指標數據。這裏詳細的可以參考之前HTTP Request,含義相同。
在這裏插入圖片描述
 這裏我們再對JDBC Request中的配置做一個介紹:

  1. Variable name of pool declared in JDBC connection configuration:引用JDBC連接配置,和所需使用的JDBC Connection Configuration中配置的Variable Name Bound to Pool保持一致即可
  2. Query Type:查詢SQL類型
  3. Parameter Values:參數值,多個用逗號分隔
  4. Parameter Types:參數類型,多個用逗號分隔
  5. Variable Names:SQL執行結果變量名
  6. Result Variable Names:結果變量名稱,將所有執行結果封裝爲一個對象進行存儲
  7. Query Timeouts:查詢超時時間
  8. Handle ResultSet:查詢結果集


 這裏面有部分參數例如Result Variable Names等,可能需要搭配其他組件(類似Debug Sample)使用,大家可以自己查看官方文檔瞭解使用。

2.分佈式壓測

 在進行分佈式壓測前,大家可以先掃一眼【JMeter - Linux環境壓測以及HTML圖形化報告】這篇文章,對Linux環境下進行壓測有一個大概的瞭解。

2.1 分佈式壓測介紹

 假設我們單臺服務器可以同時支持1000個併發量,若我們需要對目標進行更多壓力的場景則無法滿足,分佈式壓測就出現了。在平時場景下我們可能只需要使用單臺機器對目標機器產生壓力,但是在真正高併發的壓測下則會因爲受限於CPU、網絡、IO等而無法達到目標壓力。這裏我們就可以使用多臺機器去向目標機器產生更大的壓力,模擬成千上萬甚至更多用戶的併發訪問。
 例如我們一臺2核4G的機器可以向API Server產生1000的併發量,那我們通過分佈式壓測可以達到1000*機器數量大小的壓力。
在這裏插入圖片描述

2.2 分佈式壓測原理

 分佈式壓測通常都會有一臺機器作爲Master主節點,然後其他機器作爲進行壓測操作的實際操作機器,稱爲“肉雞”、“執行機”。我們在主節點上發起壓測命令,Master節點會向其他機器發送壓測腳本,"肉雞"只需提前運行jmeter-server即可。測試執行完成後各臺機器會將結果數據回傳給Master進行彙總。
在這裏插入圖片描述
 實現起來也十分簡單,我們點開配置文件可以看到remote_hosts這個配置,後面實際操作時修改即可,後面會提及。
在這裏插入圖片描述

2.3 分佈式壓測相關步驟以及注意事項

 我們在瀏覽【JMeter官方用戶手冊】時,可以看到下面這段話。這裏我們做一個簡單總結。
在這裏插入圖片描述

  1. 系統正確的端口被打開或者防火牆被關閉,如果是虛擬機可以通過service iptables stop直接關閉防火牆,阿里雲類似服務器在安全組上配置對應端口開放規則即可。
  2. 所有主從客戶端都應在同一個子網下。
  3. 保證客戶端可以正常對服務器發送請求。
  4. 所有客戶端需保證相同版本JMeter以及Java,混合版本可能會導致異常錯誤。
  5. 給RMI設置SSL或者禁用。
  6. 儘可能使用內網進行壓測。
  7. 所有肉雞必須保證已經運行jmeter-server,可通過ps -ef|grep jmeter-server查看。
  8. JMX腳本文件只需Master機器存在即可,開始分佈式壓測Master機器會將JMX腳本指令發送給Slave機器;若腳本中包含CSV參數化操作,則需每臺機器都拷貝一份CSV文件並且路徑保持一致。

2.4 分佈式壓測常見問題

 爲了接下來更順利進行分佈式壓測,這裏會將在整個壓測過程中可能出現的問題進行一個列舉和提供解決方案。

2.4.1 內存分配

[root@iZuf662mggaelpzvvwbgrkZ bin]# ./jmeter-server
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; 
error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:

 當我們去啓動肉雞jmeter-server時,可能會出現上面這個問題,根據提示我們也很容易就明白這是由於內存分配問題導致的JVM啓動失敗。這裏我們找到bin目錄下jmeter啓動文件中如下圖所示的HEAP配置,修改其初始堆內存以及最大堆內存,如果配置比較低修改爲256m即可。
在這裏插入圖片描述

2.4.2 RMI密鑰

[root@iZuf662mggaelpzvvwbgrkZ bin]# ./jmeter-server
Server failed to start: java.rmi.server.ExportException: Listen failed on port: 0; nested exception is:
        java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)
An error occurred: Listen failed on port: 0; nested exception is:
        java.io.FileNotFoundException: rmi_keystore.jks (No such file or directory)

 這個問題,是因爲我們沒有配置RMI所需的有效密鑰。這裏我們不需要可以暫時將其禁用掉。打開jmeter.property找到server.rmi.ssl.disable將其改爲true禁用SSL即可。
在這裏插入圖片描述

2.5 分佈式壓測實操

 這裏我們同樣使用之前介紹HTML可視化時使用的jmx腳本文件,稍微對基本的配置進行一些修改。將整個壓測的總樣本數進行一個提升並將該文件上傳至Master節點機器,這裏Master機器就以我們Windows環境爲例。
在這裏插入圖片描述
 這裏我們找到jmeter.propertiesremote_hosts進行修改,這裏我準備了兩臺肉雞,大家資源充足或者實際壓測中可配置多臺,用逗號分隔。需保證每臺機器對應端口都開放。
在這裏插入圖片描述
 另外之前說到的server.rmi.ssl.disable也需改爲true禁用。這裏我們先將兩臺肉雞jmeter-server啓動。
在這裏插入圖片描述
在這裏插入圖片描述
 再啓動我們本地的JMeter打開我們需要進行壓測的JMX腳本文件。這裏我們可以看到這裏Remote Start中已經有了我們之前配置的遠程服務器信息,這裏可以通過Remote Start All去開啓壓測。
在這裏插入圖片描述
 如果服務器不在同一個子網的話,在壓測過程中可能會提示連接失敗、超時等錯誤。故需要保證多個節點在同一個子網並使用內網IP地址去交互。
在這裏插入圖片描述
 壓測完成後,肉雞會反饋壓測結果給主節點進行彙總。這裏我們可以看到這次分佈式壓測的結果,由於我這邊提供API服務的機器在壓測過程中被其他小夥伴誤關了,所以這裏大家可以看到這次壓測結果是存在Error的。
 另外我們也可以在本地通過CLI模式./jmeter.bat -n -t C:\Users\胖胖\Desktop\server_.jmx -r -l C:\Users\胖胖\Desktop\result.jtl -e -o C:\Users\胖胖\Desktop\temp去達到分佈式壓測的效果。
在這裏插入圖片描述
 關於JMeter相關的內容到這裏就差不多結束了,大家可以自己動手去實踐這樣才能對其有更深刻的理解和更專業的使用。世界一直在進步,所以學習一直不能停止,希望大家有所收穫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章