当前位置:网站首页>【性能測試】一文讀懂Jmeter
【性能測試】一文讀懂Jmeter
2022-07-04 07:43:00 【李易安QSR】
文章目錄
一、常用壓力測試工具對比
- LoadRunner
性能穩定,壓測結果及細粒度大,可以自定義脚本進行壓測,但是太過於重大,功能比較繁多。 - apache ab
模擬多線程並發請求,ab命令對發出負載的計算機要求很低,既不會占用很多CPU,也不會占用太多內存,但卻會給目標服務器造成巨大的負載,簡單的DDOS攻擊等 - webbench
webbench首先fork出多個子進程,每個子進程都循環做web訪問測試。子進程把訪問的結果通過pipe告訴父進程,父進程做最終的統計結果。
二、Jmeter安裝和目錄講解
需要JDK環境:8以上,JDK安裝教程
官網下載,解壓
bin目錄:可執行文件,包含配置
- Jmeter.bat文件:windows啟動文件
- Jmeter:mac或linux啟動文件
- Jmeter-server:mac或linux分布式壓測使用的啟動文件
- jmeter.properties:核心配置文件
- shutdown:關閉程序
- report-template:聚合報告的生成模板
docs目錄:文檔目錄,存放它的使用文檔
extras目錄:插件目錄,做二次開發的目錄
lib目錄:核心工具類junit和一些核心包ext
licenses目錄:
printable_docs目錄:
- 如何調整Jmeter的語言版本
Options - Choose Language - English/Chinese(Simplify)
也可以直接修改bin目錄下 的jmeter.properties配置文件中
# language = en
language=zh
類似的,還可以修改一些主題等等
三、Jmeter核心組件
1、測試計劃
2、線程組
測試計劃中Add - threads -> 線程組(控制總體並發)
Number of Threads:線程數 ,虛擬用戶數。一個虛擬用戶占用一個線程
Ramp-up period(秒):全部進程啟動的時長。100個線程20s,錶示20s內100個線程都會慢慢被啟動,每秒啟動5個
Loop Count:循環次數。每個線程發送的次數。如設置為5,100個線程
3、采樣器
線程組 - 添加 - Sampler(采樣器) - Http/…
web服務器:默認協議是http,默認端口是80,目標服務器名稱或ip地址
路徑:服務器URL
Use multipart/form-data for HTTP POST:當發送POST請求時,使用use multipart/form-data方法發送,默認不選中
4、添加結果樹
線程組 - 添加 - 監聽器 - 查看結果樹
5、斷言
右鍵request - add - 斷言 - 選擇對應需要的斷言(響應斷言…)
6、聚合報告
線程組 - 添加 - 監聽器 - 聚合報告
四、Jmeter自定義變量和可變參數
測試計劃 - 添加 - 配置元件 - 用戶自定義變量
可以添加配置一些ip地址或者其他信息
取值的地方使用${變量名}
即可
測試計劃級別的用戶變量
CSV可變參數壓測
配置信息說明
這邊csv或者txt文件都可以的
如果有兩列,卻只有一個參數使用,會默認獲取第一列有效數據
五、Jmeter數據庫壓測實操
1、添加線程組
2、創建JDBC請求
3、為此次請求添加一個配置元件
配置相關數據庫信息等
需要先將第4步的jar添加全局,才可以填寫所有的信息
4、添加全局數據庫連接jar
5、編寫指定的JDBC 語句
添加結果樹查看執行結果
JDBC請求中的一些參數說明
Max Number of connections:最大連接數
MAX wait:最大等待時間
Auto Commit:是否自動提交事務
注:這裏的sql語句不要寫;
結尾
Variable names:sql執行結果的變量名
Result variable name:此處填寫一個變量,可以將所有的查詢結果封裝為這個對象
線程組 - 添加 - Debug Sampler
執行後就可以看到Debug 采樣器中顯示的結果信息
Handle ResultSet:處理結果集
六、分布式壓測
為什麼要做分布式壓測
普通壓測:單臺機對目標機器產生的壓力比較小,受限因素包括CPU、網絡和IO等
分布式壓測:利用多臺機器向目標機器產生壓力,模擬幾萬用戶並發訪問
如何做分布式壓測
簡單原理說明
- 總控的機器節點叫做master,其他產生壓力的機器叫“肉雞” server
- master會把壓測脚本發送到server上面
- 只需要將Jmeter的Jmeter-server打開就可以了,不用啟動Jmeter
- 結束後,server會把壓測數據回傳給master,然後master匯總輸出報告
- 配置詳情
Jmeter命令行啟動方式,參數詳解
官方教程:https://jmeter.apache.org/usermanual/index.html#get-started
-h 幫助
-n 非GUI模式
-t 指定要運行的Jmeter測試脚本文件
-l 記錄結果的文件,每次運行之前(要確保之前沒有運行過,即xxxx.jtl不存在,不然報錯)
-r Jmeter.properties文件中指定的所有遠程服務器
-e 在脚本運行結束後生成html報告
-o 用於存放html報告的目錄(目錄要唯恐,不然報錯)
jmeter -n -t linux_user_api.jmx result.jtl -e -o /usr/local/software/jmeter/temp/ResultReport
jmeter -n -t linux_user_api.jmx -l result.jtl -e -o /usr/local/software/jmeter/temp/ResultReport
分布式壓測實戰
Jmeter分布式壓測准備工作
壓測注意事項:
the firewalls on the systems are turned off or correct ports are opened.
系統上的防火牆被關閉或正確的端口被打開。
all the clients are on the same subnet.
所有的客戶端都在同一個子網上。
the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn’t use 192.xx or 10.xx IP address, there shouldn’t be any problems.
如果使用192.x.x.x或10.x.x.x IP地址,則服務器比特於同一子網中。 如果服務器不使用192.xx或10.xx IP地址,則不應該有任何問題。
Make sure JMeter can access the server.
確保JMeter可以訪問服務器。
Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly.
確保在所有系統上使用相同版本的JMeter和Java。 混合版本將無法正常工作。
You have setup SSL for RMI or disabled it.
您已為RMI設置SSL或將其禁用。
官網地址 http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
- 壓測注意事項:一定要用內網IP,不用用公網IP,用ping去檢查
master:司令
slave:奴隸
target:目標
地址:http://jmeter.apache.org/images/screenshots/distributed-names.svg
地址:http://jmeter.apache.org/images/screenshots/distributed-jmeter.svg
- 遠程拷貝(內網地址)
scp -r /usr/local/software/jdk-8u141-linux-x64.tar.gz [email protected]:/usr/local/software
scp -r /usr/local/software/jmeter/apache-jmeter-4.0.tgz [email protected]:/usr/local/software/jmeter
啟動
./jmeter-server 或者 nohup ./jmeter-server &
- 檢查啟動是否成功
ps -ef|grep jmeter-server
ps aux|grep jmeter-server
- 關注CPU和內存使用
本地非GUI分布式壓測 -r
jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/result
壓測結果
./jmeter -n -t /Users/jack/Desktop/remote.jmx -r -l /Users/jack/Desktop/jtl/result.jtl -e -o /Users/jack/Desktop/result
Creating summariser <summary>
Created the tree successfully using /Users/jack/Desktop/remote.jmx
Configuring remote engine: 172.20.10.3:8899
Using local port: 8899
Configuring remote engine: 172.20.10.11:8899
Starting remote engines
Starting the test @ Thu Mar 29 23:21:13 CST 2018 (1522336873931)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary = 4 in 00:00:22 = 0.2/s Avg: 5582 Min: 94 Max: 21006 Err: 1 (25.00%)
Tidying up remote @ Thu Mar 29 23:21:36 CST 2018 (1522336896842)
... end of run
- 壓測修改master節點信息
jemeter.properties 值是slave機器的ip+端口號,如果有多個,用逗號分隔
remote_hosts=192.168.0.102:8899,192.168.0.101:8899
server.rmi.ssl.disable=true (前面有說到)
- 啟動slave機器,注意要同個網段,ip地址用內網ip
./jmeter-server
Using local port: 8899
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.0.102:8899](local),objID:[3a585a4d:162724586ab:-7fff, 3963132813614033916]]]
相關資料:
https://www.cnblogs.com/Fine-Chan/p/6233823.html
https://blog.csdn.net/liujingqiu/article/details/52635289
https://www.cnblogs.com/puresoul/p/4844539.html
七、如何提高壓測質量
使用非GUI模式:jmeter -n -t test.jmx -l result.jtl
减少使用Listener,如果使用-l 參數,他們都可以被删除或者禁用
在加載測試期間不要使用“查看結果樹”或者“查看結果”錶監聽器,只能在脚本階段使用它們來調試
包含控制器在這裏沒有幫助,因為他們它是將文件中的所有測試元素添加到測試計劃中
不要使用功能模式,使用csv輸出而不是xml
只保存你需要的數據,盡可能减少使用斷言
如果測試需要大量數據,可以提前將測試數據保存在數據文件中,以csv·Read方式進行讀取
用內網壓測,减少其他帶寬影響壓測效果
如果壓測大流量,盡可能使用多節點以非GUI模式向服務器壓測
官方推薦:https://jmeter.apache.org/usermanual/best-practices.html#lean_mean
八、測試報告詳解
查看其他地方的jtl文件
利用軟件從阿裏雲Centos服務器下載壓測報告,講解Jtl文件,並怎麼查看文件
可以通過打開jmeter,新建線程組->summary report->瀏覽文件 進行查看
簡介:把Jmtere壓測結果轉換為Html
指令
jmeter -n -t /usr/local/software/jmeter/temp/linux_users_api.jmx -l
/usr/local/software/jmeter/temp/jtl/result.jtl -e -o
/usr/local/software/jmeter/temp/result
Jmeter圖形化HTML壓測報告dashboard
壓測報告 html裏面Dashboard的核心指標
1)Test and Report informations
Source file:jtl文件名
Start Time :壓測開始時間
End Time :壓測結束時間
Filter for display:過濾器
Lable:sampler采樣器名稱
2)APDEX(Application performance Index)
apdex:應用程序性能指標,範圍在0~1之間,1錶示達到所有用戶均滿意
T(Toleration threshold):可接受閥值
F(Frustration threshold):失敗閥值
3)Requests Summary
OK:成功率
KO:失敗率
4)Statistics 統計數據
lable:sampler采樣器名稱
samples:請求總數,並發數*循環次數
KO:失敗次數
Error%:失敗率
Average:平均響應時間
Min:最小響應時間
Max:最大響應時間
90th pct: 90%的用戶響應時間不會超過這個值(關注這個就可以了)
2ms,3ms,4,5,2,6,8,3,9
95th pct: 95%的用戶響應時間不會超過這個值
99th pct: 99%的用戶響應時間不會超過這個值 (存在極端值)
throughtput:Request per Second吞吐量 qps
received:每秒從服務器接收的數據量
send:每秒發送的數據量
Jmeter圖形化HTML壓測報告Charts報錶
1、Over Time(隨著時間的變化)
Response Times Over Time:響應時間變化趨勢
Response Time Percentiles Over Time (successful responses):最大,最小,平均,用 戶響應時間分布
Active Threads Over Time:並發用戶數趨勢
Bytes Throughput Over Time:每秒接收和請求字節數變化,藍色錶示發送,黃色錶示接受
Latencies Over Time:平均響應延時趨勢
Connect Time Over Time :連接耗時趨勢
2、Throughput
Hits Per Second (excluding embedded resources):每秒點擊次數
Codes Per Second (excluding embedded resources):每秒狀態碼數量
Transactions Per Second:即TPS,每秒事務數
Response Time Vs Request:響應時間和請求數對比
Latency Vs Request:延遲時間和請求數對比
3、Response Times
Response Time Percentiles:響應時間百分比
Response Time Overview:響應時間概述
Time Vs Threads:活躍線程數和響應時間
Response Time Distribution:響應時間分布圖
九、相關問題總結
配置元件=》前置處理器=》定時器=》采樣器=》後置處理器=》斷言=》監聽器
問題:
[[email protected] bin]# ./jmeter-server
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[:39308](local),objID:[24e78a63:16243c70661:-7fff, 7492480871343944173]]]
Server failed to start: java.rmi.RemoteException: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
An error occurred: Cannot start. Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
解决:
hostname 命令獲取機器名稱,追加一個映射 iZwz95j86y235aroi85ht0Z
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
120.79.160.143 iZwz95j86y235aroi85ht0Z
windows用戶 修改c:\windows\system32\drivers\etc\hosts文件,增加一條域名 與IP的映射
問題
[[email protected] 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 over SSL的有效密鑰庫,或者禁用了SSL。
1、禁用SSL
jmeter.property裏面 server.rmi.ssl.disable 改為 true,錶示禁用
問題:
[[email protected] bin]# ./jmeter
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:
# /usr/local/jmeter/apache-jmeter-4.0/bin/hs_err_pid5855.log
解决:
編輯jmeter
搜索 : "${HEAP:="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m"}"
改變初始堆內存和最大堆內存
- 僅修改 server_port 即可,下面兩者一樣
server.rmi.localport=8899 錶示slave server啟動顯示的端口
server_port=8899 錶示master機器要遠程連接的端口 即 remote_hosts=xxxx:8899
我們要在多網卡的服務器上開啟RMI服務的話必須指定IP,使他們能够在同一個網段內。
需要以下幾步(假定所有機器都在10.120.11.*網段,agent服務器為linux,controller服務器為windows):
1、 修改agent服務器,指定agent機器的IP
修改jmeter-server文件
# vi jmeter-server
修改RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(需要連接的IP)
2、修改server服務器,指定server機器的IP
修改jmeter.bat文件
新增set rmi_host=-Djava.rmi.server.hostname=10.120.11.214
修改set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
確定在controller機器上安裝jdk,版本和jmeter一致,配置環境變量:Java_home等
在Agent機器上安裝jdk,配置環境變量:Java_home和JMeter_home 安裝目錄不要帶空格,最好都是簡短的英文路徑
master機器啟動後會拷貝jmx文件到slave機器
所以不需要在每臺slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx脚本即可。 如果使用csv進行參數化,則需要把參數文件在每臺slave上拷一份且路徑需要設置成一樣的。 總樣本數 = 線程數 * 循環次數 * 執行機總數
連接失敗原因排查
以下步驟進行排查:
1. jmeter-server是否啟動;
2. 是否聯網
3. ping 服務器IP是否暢通.
4. telnet 端口 192.168.3.10 1099
5. 檢查服務器的防火牆是否關閉。
6. 阿裏雲安全策略是否正常
“could not find ApacheJmeter_core.jar”
解决:在Agent機器安裝jdk,並設置環境變量
”Bad call to remote host"
解决:檢查被控制機器上的jmeter-server有沒有啟動,或者remote_hosts的配置是否正確。
边栏推荐
- Improve the accuracy of 3D reconstruction of complex scenes | segmentation of UAV Remote Sensing Images Based on paddleseg
- How does dataframe calculate the average value of each row as another column
- L1-028 judging prime number (10 points)
- Activiti常见操作数据表关系
- Leetcode(215)——数组中的第K个最大元素
- ZABBIX monitoring system custom monitoring content
- 论文学习——基于极值点特征的时间序列相似性查询方法
- Amd RX 7000 Series graphics card product line exposure: two generations of core and process mix and match
- Technical experts from large factories: common thinking models in architecture design
- Blog stop statement
猜你喜欢
Amd RX 7000 Series graphics card product line exposure: two generations of core and process mix and match
手写简易版flexible.js以及源码分析
Zephyr learning notes 1, threads
论文学习——基于极值点特征的时间序列相似性查询方法
User login function: simple but difficult
Zephyr 学习笔记2,Scheduling
[network security] what is emergency response? What indicators should you pay attention to in emergency response?
谷歌官方回应:我们没有放弃TensorFlow,未来与JAX并肩发展
ZABBIX monitoring system custom monitoring content
Preliminary study on temporal database incluxdb 2.2
随机推荐
BibTex中参考文献种类
深入浅出:了解时序数据库 InfluxDB
L1-025 positive integer a+b (15 points)
【Go基础】1 - Go Go Go
Introduction to neural network (Part 2)
[C language] open the door of C
MySQL error resolution - error 1261 (01000): row 1 doesn't contain data for all columns
如何用MOS管来实现电源防反接电路
This monitoring system can monitor the turnover intention and fishing all, and the product page has 404 after the dispute appears
Rhcsa the next day
Used on windows Bat file startup project
Text processing function sorting in mysql, quick search of collection
【FreeRTOS】FreeRTOS學習筆記(7)— 手寫FreeRTOS雙向鏈錶/源碼分析
Div hidden in IE 67 shows blank problem IE 8 is normal
flask-sqlalchemy 循环引用
MYCAT middleware installation and use
In the era of low code development, is it still needed?
MySQL中的文本處理函數整理,收藏速查
Preliminary study on temporal database incluxdb 2.2
Introduction to rce in attack and defense world