1 Linux下jmeter性能測試
1.1 環境配置
1.1.1 環境准備
整個測試過程中,測試環境為Windows系統和linux系統兩部分,Windows環境下調試和配置需要運行的jmeter腳本,在linux系統中開始性能測試過程。
Linux安裝CentOS 7系統,並在系統中安裝好java環境,此次測試中,配置的java為java 1.8.0_211。
1.1.2 測試軟件准備
測試中准備apache-jmeter-5.0版本jmeter進行測試。
為保證腳本設置和腳本運行時沒有差異,Windows和Linux環境使用同一個版本的jmeter,也避免測試過程中因測試工具版本不兼容,出現異常。
1.2 jmeter集群配置
1.2.1 單台jmeter設置
將jmeter包拷貝至linux指定位置並解壓(tar –zxvf 壓縮包名稱),開始配置jmeter。
1.配置環境變量
打開/etc/profile,進入文件最后添加jmeter環境配置,如下圖紅色橫線所示,路徑為Jmeter包存放位置。(可進入jmeter的bin目錄下,輸入pwd命令查看對應位置)
配置完成后,保存此配置文件,執行命令source /etc/profile讓配置生效。此時在輸入命令:jmeter –v可查看對應的jmeter版本信息。
Jmeter要配環境變量,這樣不用手動起server,如果不配置環境變量,每次啟動時都需要進入到對應的bin目錄下進行操作。
2. Jmeter內存調優
壓測過程中jmeter報內存溢出(報錯:java.lang.OutOfMemoryError:gc overhead limit exceeded),或在測試過程中因jmeter自身內存限制,影響測試結果,在測試前可調整jmeter內存。
查看bin目錄下jmeter文件(此次使用的版本,內存設置在jmeter文件中,也有在jmeter.sh/jmeter.bat文件中),修改HEAP=-Xms512m -Xmx1024m對應數值。此處對應的參數意義為:
-Xms:初始值
-Xmx:最大值
-Xmn:最小值
Heap Size的設置不宜太小,也不宜太大。若設置太小程序的響應速度會變慢了,因為GC占用了更多的時間,而應用分配到的執行時間較少。太大也會造成空間的浪費,而且也會影響其他程序的正常運行,Heap Size 最大最好不要超過可用物理內存的80%。建議將-Xms和-Xmx選項設置為相同。
根據實際情況,在此次過程中將此數值設置為4096m。
1.2.2 Jmeter集群配置
Jmeter 支持分布式壓測,將需要模擬的大量並發用戶數分發到多台壓力機,使 Jmeter 擁有更大的負載量,滿足真實業務場景(高並發場景)。
Jmeter分布式配置主要分為master端修改和slave端修改。設置前請確認,master端和slave端要ping通。
先對slave端進行配置。
1.進入 jmeter.properties文件,查找並取消這段配置的注釋 server.rmi.ssl.disable=false ,false改成true。
2.進入jmeter-server文件(也有版本在jmeter.properties文件中),查找 jmeter-server -Djava.rmi.server.hostname=xx.xx.xx.xx ,設置slave節點IP(即當前slave機ip),這里設置的IP也是啟動slave上的jmeter服務的IP,如果啟動時顯示的信息與此不符,請確認是否是多網卡或設置虛擬IP的原因。
3. 當默認的1099端口被占用或需要修改對應端口值時,進入 jmeter.properties文件,查找server.rmi.localport和server_port,並取消注釋,將值修改為1099,固定分布式啟動監聽端口。此次測試將端口都設置在了1099.
Slave端設置完成后,在master端添加已設置好的slave機IP和端口信息。
進入master機的jmeter.properties文件,查找修改remote_hosts=ip:port:改成要啟動的Linux機的ip以及端口。
例如:
多個slave機之間,使用逗號分隔開。
設置完成后,可能會遇到打不開的權限問題,此時:chmod 777 filename ,更改文件權限,然后再重新就可以打開了
1.2.3 Jmeter集群啟動
設置完slave機和master機,先在slave機啟動服務。
執行:./jmeter-server -Djava.rmi.sever.hostname=IP(slave機IP)完成slave機啟動。如下,啟動10.30.20.71的Slave機,當出現以下提示信息時,slave機正常啟動,等待master機的調用。
當slave機啟動后,在master機執行語句:./bin/jmeter.sh -n -t ./xxxx.jmx -R 10.30.20.71 -l ./result/result.jtl -e -o ./report 即可調用此slave機。
當master機啟動slave機進行測試時,在slave機下出現提示信息:
而master機出現信息和執行數據:
腳本運行完成時,master機同樣出現tydying up…腳本執行完成,開始整理報告數據,出現…end of run報告整理完成。
在腳本執行完成時,slave出現下列提示信息:
Finishing the test on host 10.30.20.71 @ Mon Oct 19 18:26:23 CST 2020 (1603103183123)。
1.3 Jmeter腳本設置
此次設置,為滿足測試要求,使用Stepping Thread Group插件進行設置。安裝好此插件,並對此插件進行設置,每一項設置參數含義如下:
This group will start 100 threads:設置線程組啟動的線程總數為100個;
First,wait for N seconds:啟動第一個線程之前,需要等待N秒;
Then start N threads:設置最開始時啟動N個線程;
Next,add 10 threads every 30 seconds,using ramp-up 5 seconds:每隔30秒,啟動10個線程,10個線程在5秒內啟動完成;
Then hold load for 60 seconds:啟動的線程總數達到最大值之后,再持續運行60秒;
Finally,stop 5 threads every 1 seconds:每秒停止5個線程;
此插件按一般線程組一樣進行接口和控制器設置,開始腳本調試和設置,設置后調整上述參數即可開始測試。
1.4 Jmeter測試
再運行腳本之前,檢查文件路徑,需要再jmeter下建立一個report和一個result路徑,以便在測試過程中指定測試結果和測試報告存放地址。每次進行測試時,這兩個路徑下應該為空,否則不能正常進行測試。
將設置好的腳本,xxx.jmx文件,傳到已配置的linux環境jmeter目錄下,執行命令語句。
Jmeter官網用戶手冊介紹如下:
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile <argument> -> the jmeter test(.jmx) file to run
-l, –logfile <argument> -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost <argument> -> Set a proxy server for JMeter to use
-P, –proxyPort <argument> -> Set proxy server port for JMeter to use
具體的含義如下:
-h 幫助 -> 打印出有用的信息並退出;
-n 非 GUI 模式 -> 在非 GUI 模式下運行 Jmeter;
-t 測試文件 -> 要運行的 JMeter 測試腳本文件;
-l 日志文件 -> 記錄結果的文件;
-r 遠程執行 -> 在Jmter.properties文件中指定的所有遠程服務器;
-H 代理主機 -> 設置 JMeter 使用的代理主機;
-P 代理端口 -> 設置 JMeter 使用的代理主機的端口號;
根據實際情況選擇,執行語句時使用的命令。
1.5 Jmeter報告查看
當測試完成之后,自動生成報告,報告指定在report路徑下,測試結果保存在result路徑下。此時將report整個打包(tar –cvf report.rar report),打包完成之后將打包文件傳到windows環境中進行查看。