1、安裝java8:
通過網址下載:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
我下載的是RMP安裝包。
下載后改名:
安裝:
配置環境變量:
在內容末尾加上:
JAVA_HOME=/usr/java/latest CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME
編輯好后,使環境變量生效:
source /etc/profile
以上路徑可以在以下檢查安裝軟件的位置可以查到:
2、使用jemter
去下載:https://jmeter.apache.org/download_jmeter.cgi
下載:
wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.3.tgz
解壓:
tar -xvf apache-jmeter-5.3.tgz
用cli模式運行並加載測試模板,最后生成html報告:
cd apache-jmeter-5.3.tgz && bin/jmeter -n -t Test\ Plan.jmx -l result.jtl -e -o ./html
參數:
# -n:以非GUI形式運行Jmeter # -t:運行JMX測試計划腳本文件的路徑 # -l:運行結果保存路徑(.jtl),此文件必須不存在
# -j: jmeter運行日志
# -r: 運行分布式壓測服務器,指明用jmeter屬性"remote_hosts"
# -R:運行分布式服務器,其后跟着服務器列表 # -e:在腳本運行結束后生成html報告,此參數要與-l一起使用。 # -o:用於存放html報告的目錄,此目錄必須為空。此參數與-e一起使用。
測試模板請在本機window下運行jmeter GUI來生成,保存后再上傳到測試服務器上。
------------恢復內容開始------------
1、安裝java8:
通過網址下載:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
我下載的是RMP安裝包。
下載后改名:
安裝:
配置環境變量:
在內容末尾加上:
JAVA_HOME=/usr/java/latest CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin export PATH CLASSPATH JAVA_HOME
編輯好后,使環境變量生效:
source /etc/profile
以上路徑可以在以下檢查安裝軟件的位置可以查到:
2、使用jemter
去下載:https://jmeter.apache.org/download_jmeter.cgi
下載:
wget https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.3.tgz
解壓:
tar -xvf apache-jmeter-5.3.tgz
用cli模式運行並加載測試模板,最后生成html報告:
cd apache-jmeter-5.3.tgz && bin/jmeter -n -t Test\ Plan.jmx -l result.jtl -e -o ./html
參數:
# -n:以非GUI形式運行Jmeter # -t:運行JMX測試計划腳本文件的路徑 # -l:運行結果保存路徑(.jtl),此文件必須不存在
# -j: jmeter運行日志
# -r: 運行分布式壓測服務器,指明用jmeter屬性"remote_hosts"
# -R:運行分布式服務器,其后跟着服務器列表 # -e:在腳本運行結束后生成html報告,此參數要與-l一起使用。 # -o:用於存放html報告的目錄,此目錄必須為空。此參數與-e一起使用。
測試模板請在本機window下運行jmeter GUI來生成,保存后再上傳到測試服務器上。
而實際測試建議使用CLI模式下運行。
3、壓測中的線程屬性說明
線程數:指測試時要發起壓測的線程數量,相當於模擬訪問用戶數。如果是分布式壓力測試,則每台壓測服務器都會按這個數量產生線程,而不是整個測試的總線程數。
Ramp-Up時間:所有線程創建完成所需的時間,以上方30秒設置為例,則30秒時間產生10000個線程,每秒則產生10000/30 = 約 999 條線程;
循環次數:每個線程循環執行的次數,勾選“永遠”則表示不限次數地循環執行,一直到下方的“持續時間”結束為止,如果所有線程循環完預定的次數,則當前測試就會停止了,就算下方的“持續時間”到了實際測試也已經是完成了。
持續時間(秒):當勾選“調度器”時,表示整個測試要持續執行的時間。實際測試時並非完全遵循此時間結束,如果上方的“循環次數”設置一個數值時,就算已經在測試時已經過了設定的持續時間,如果線程未循環完預定的循環次數,仍然會循環執行完為止。
啟動延遲(秒):測試開始時需延遲多少秒才開始。
“same user on each iteration":表示每次循環是否使用同一用戶(即同一線程)執行,這對於web測試是否需要保持同一會話時有用;
”延遲創建線程直到需要“:如選項如果勾選,則在Ramp-Up時間結束后等所有線程都啟動完畢才開始執行測試,如果Ramp-Up時間未結束時,已創建的線程則在等待狀態,並未開始執行測試。實際測試中,此選項幾乎不會影響測試結果 。
4、分布式測試
由於單台壓測服務器並不足以進行創建過多線程時,則可以使用分布式測試。將所有測試線程都由各台壓測服務器同時產生,並將測試結果返回到控制服務器。控制服務器與壓測服務器可以是同一台服器。
要求:
1、壓測服務器、控制服務器、被測試服務器要在同一內網;
2、壓測服務器、控制服務器安裝的java版本一致;
3、壓測服務器、控制服務器運行的jmeter版本一致;
壓測服務器、控制服務器的jmeter的SSL設置:
所有壓測服務器與控制服務器的通訊,默認以ssl證書通訊。
可以在控制服務器中使用./create-rmi-keystore.sh 命令(jmeter軟件中附帶)產生.jks后綴名的證書,將此證書存放到各壓測服務器的jmeter軟件的bin目錄下。
個人不太建議使用SSL證書通訊方式,本人實際測試時,在1099端口開放並未占用的正常情況下,壓測服務器並未收到控制服務器的測試指令的問題,用telnet測試卻是端口並無問題。。
所以個人建議在jmeter.properties配置文件中,關閉SSL選項:
server.rmi.ssl.disable=true
注意,每台壓測服務器和控制服務器都要修改此選項。這樣就不需要SSL證書了。
在每台壓測服務器上運行壓測服務:
./jmeter-server -Djava.rmi.server.hostname=內網IP
示例:
在控制服務器上,設置壓測服務器IP。打開jmeter.properties文件,修改remote_hosts配置值:
多台壓測服務器之間用逗號相隔。1099是默認通訊端口,可省略寫入。如果壓測服務器的偵測端口已修改,則必須寫上端口。
測試端口是否被占用:
netstat -tunlp |grep 1099
一切准備就緒。在控制器啟動測試:
./jmeter -n -t ./Test_Plan.jmx -r -l ./result.jtl -e -o ./html
Test_Plan.jmx是測試計划文件, result.jtl是測試結果文件。
一些問題總結:
(1)如果遇到 open too many files,說明遇到打開文件最大值問題。可進行如下設置:
echo "ulimit -HSn 65536" >> /etc/rc.local echo "ulimit -HSn 65536" >> /root/.bash_profile ulimit -HSn 65536
(2)如果遇到out of memory異常,則增大JVM內存池。編輯jmeter文件,找到:
增加內存池大小,如:
(3) 如果測試過程中需要停止測試,正常情況下可以使用./stoptest.sh(window: stoptest.cmd)停止。如果某些異常導致無法正常停止,則直接kill掉測試進程。
其他:
檢查TCP/IP連接狀態和對應個數:
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a, s[a]}'
參考:
https://blog.csdn.net/qq_41907450/article/details/84143601
https://blog.csdn.net/chenlin465373800/article/details/78924780