【Java分享客棧】未來邁向高階工程師繞不過的技能:JMeter壓測

福隆苑居士發表於2022-05-17

前言

因為工作需要,久違的從自己的有道雲筆記中去尋找壓測相關的內容,翻開之後發現還不錯,溫故一遍後順便整理出來分享給大家。

題外話,工作8年多,有道雲筆記不知不覺都6G多了,掃一眼下來盡是雲煙過往,竟然還能發現Struts的東西,令人甚為感懷,挺好奇你們的雲筆記長什麼樣子。

話說,我如果一直這麼記下去,有朝一日能成為IT界的司馬遷不哈哈?


為何JMeter

猶記得當年工作之初,壓測根本不成為話題,當時的框架也相對複雜,和現在的SpringBoot用法簡直雲泥之別,在那種環境下,除了大公司,壓測自然不是專案首要考慮的範疇。

但時過境遷,網際網路井噴時代,資訊爆炸式輸出,大資料、雲時代接踵而至,測試崗位的重要性逐步凸顯,相應的壓力測試、效能測試也成為專案繞不開的一環。

如果說一個Java程式設計師在邁向高階工程師必須要掌握主流的技能如SpringBoot、SpringCloud、MQ、k8S等等以外,還需要具備什麼輔助技能,我可以很負責任的說,壓測一定是未來擋在面前的一扇門。

為何這麼講,首先,並非所有的公司都有一定規模,都有自己的測試團隊,或者測試人員都具備壓測能力,反而有相當多的中小企業沒有這些基礎條件,但同時又承接了一定規模的專案,不要意外,這在關係網縱橫交錯的國內是很常見的事情。

我多年工作的經歷告訴我,絕大部分程式設計師主要還是活躍在中小廠,這裡麵包含初級中級工程師,也包含因為各種原因從大廠下沉到中小廠的高階工程師,加上疫情造成市場下行壓力變大的原因,我大膽判斷未來的軟體公司會走向碎片化,更小更精簡的公司團隊會承接更大更特殊的專案任務,這種現象會在之後一些年逐步顯現。

那麼,在這種團隊中生存的程式設計師,如果未來要邁向高階工程師,壓測就是必備的技能之一,只有測試階段進行了反覆的壓測及優化,最終投入生產環境才會更安全可靠,這樣的團隊才會更被客戶單位所認可。

這也是我專門出一篇JMeter壓測相關文章的原因,嘗試了好幾個工具,還是覺得JMeter的實用性更強,壓測結果也更可靠。


JMeter用法

安裝其實挺簡單,為了方便演示,我直接Windows上安裝了,後面生產環境用法會講Linux下安裝,官網相關地址如下。

1)、官網:http://jmeter.apache.org/

2)、下載:http://jmeter.apache.org/download_jmeter.cgi/

3)、使用者手冊:http://jmeter.apache.org/usermanual/index.html

1、安裝

1)、下載

clipboard.png


2)、解壓

解壓後在bin目錄雙擊jmeter.bat開啟,介面如下。

clipboard.png

2、使用

1)、新增執行緒組

測試計劃右鍵-新增-Threads(Users)-執行緒組

clipboard.png

執行緒組配置看圖片中紅字說明

clipboard.png

2)、HTTP請求預設值

執行緒組右鍵-新增-配置元件-HTTP請求預設值,設定一個預設的路徑,之後就不用每個地方都重寫一遍了。

clipboard.png

clipboard.png


3)、新增HTTP請求

執行緒組右鍵-新增-Sampler-HTTP請求,新建一個拿來壓測的請求URL及引數。

這裡引數給的是變數,變數名對應後面的配置檔案,用${XXX}這樣的形式寫入。

目的是,模擬多個使用者發出這個請求,即有多個user和多個token寫入cookie,如:

userId1,userToken1

userId2,userToken2

userId3,userToken3

clipboard.png

設定請求路徑及變數如圖所示

clipboard.png


4)、模擬多使用者請求

這裡需要用到變數,執行緒組右鍵-新增-配置元件-CSV Data Set Config。

clipboard.png

clipboard.png

配置檔案如下,自己設定一個id和token,在瀏覽器上F12查詢一個拿來用。
或者使用程式生成幾百幾千個使用者id,token,來模擬多使用者訪問。

clipboard.png


5)、檢視壓測結果

執行壓測後需要檢視相關結果,執行緒組右鍵-新增-監聽器-聚合報告,這裡有很多包括表格、圖表等等,一般就看聚合報告。

clipboard.png

聚合報告如圖所示,這裡的Throughput屬性就是指吞吐量,前面的Samples就是請求量。

含義:10000個請求的吞吐量是300-400之間,可以通俗理解為僅支援幾百個併發(方便理解專業點一般不這麼講),很低,需要效能優化。

clipboard.png


生產環境用法

1、安裝

1)、將apache-jmeter-3.3.zip上傳到Linux伺服器上;

2)、unzip xx.zip進行解壓;

3)、如果報了找不到unzip命令,就執行yum install -y unzip zip安裝上就可以了。


2、新建壓測檔案

1)、新建一個壓測檔案:如user_list.jmx,設定執行緒組中執行緒數為5000,迴圈次數為10,表示執行50000次;

2)、將這個檔案上傳到Linux伺服器上;

3)、具體新建壓測檔案jmx的方法參照前面的講解。


3、執行壓測

1)、同級目錄下,執行命令:
./apache-jmeter-3.3/bin/jmeter.sh -n -t user_list.jmx -l result.jtl

2)、啟動jmeter進行壓測,壓測後的結果輸出為result.jtl檔案。


4、觀測現象

在執行過程中,可以另開啟一個視窗,執行top命令檢視伺服器承受的負載。(主要看紅框這個,以及下面程式中的java相關的,會發現負載變得很大,CPU佔用率也很高。

clipboard.png


5、匯出結果

1)、將result.jtl下載到本地環境,然後在jmeter中的聚合報告那裡,瀏覽開啟,看結果;

2)、可以發現吞吐量很不理想,Linux伺服器配置較低時,error很高,說明應用程式難以承受直接掛掉了。

clipboard.png


6、壓測建議

1)、壓測不能依靠一次評判,一般第一次只是熱身,以第二次第三次壓測為準;

2)、不要在工作時間或執行高峰期時間進行壓測,這是很危險的行為,最佳時期一定是測試階段,少部分特殊情況只能在生產環境壓測也一定要選擇安全時段如凌晨;

3)、根據壓測結果,進行效能優化後,可以再次像上述一樣進行壓測,然後匯出聚合報告進行對比,直到達到理想結果。


總結

其實壓測本身不難,壓測的工具和方式也很多,比如redis有自己的壓測工具redis-benchmark,還有Apache Benchmark簡稱ab,是Apache自帶壓測工具,這些用法都很簡單。

壓測是邁向高階工程師必會的技能之一,尤其是對核心業務介面的壓測十分常用,正規的專案在測試階段都需要壓測,若公司有測試團隊當然更好,但以java高階工程師為目標的話,壓測技能你可以不會,但絕不能不瞭解。


分享

開篇說了,這是我8年多工作及學習過程中在雲筆記中記錄的內容之一,其實還有很多我閒暇之餘都做了下整理,有感興趣的朋友可以私信我獲取,什麼時候用到了翻開說不定就能節省很多時間。



本人原創文章純手打,專注於分享主流技術及實際工作經驗,覺得有一滴滴幫助的話就請點個贊和推薦吧!


相關文章