我們在開發的程序中,如果遇到系統預估訪問量會比較大的時候,或者我們再做底層基礎服務的時候,往往需要對我們的服務性能做一些壓力測驗和穩定性測驗,市面上有很多壓測工具,今天我們主要講解的是Jmeter壓力測驗工具,鑒于最近做的一次專案正兒八經的做了一次壓測,加上以前零零碎碎的學習,本次我打算總結一下,
一、Jemter的安裝
我所下載的Jmeter是5.4版本的,解壓過后進入bin目錄,雙擊jmeter.sh,如圖表示軟體啟動成功.

二、如何構建一個介面的壓測腳本
接下來我們啟動一個介面服務,新增壓測腳本
1、新增執行緒組


創建100個執行緒,指定在1s內生成這全部100個執行緒,回圈跑10次,整個壓測跑下來執行介面請求1000次,
2、構建http取樣器


輸入采樣器的名稱、協議、服務器域名或者IP、埠號、Method及Url資訊,
3、監聽器里添加查看結果樹(比較耗服務器性能,不需要可以不加)和聚合報告

三、報告詳解
看下我們第一次的的壓測結果,
本次的介面完全是通過mysql來提供資料的,沒有做任何的快取,性能是非常之差,我們詳細解釋下各個引數的意思.
樣本:就是本次我們一共進行了多少次介面請求
平均值:就是介面的平均回應時間,單位是ms
中位數:就是介面回應時間的中位數,單位是ms
90%百分數:就是90%的介面回應時間不超過這個數值,單位是ms
95%百分數:就是95%的介面回應時間不超過這個數值,單位是ms
99%百分數:就是99%的介面回應時間不超過這個數值,單位是ms
最小值:介面的最小回應時間,單位是ms
最大值:介面的最大回應時間,單位是ms
例外:介面例外的百分比
吞吐量:單位時間(1s)的介面請求次數
接收:收到的千位元組每秒的吞吐量測驗
發送:發送的千位元組每秒的吞吐量測驗
接下來我們做三次性能優化
①:加快取Redis

②:加快取Redis且用protobuf序列化

③:加快取EhCache

這樣我們可以通過壓測工具一步步測驗我們程式優化的效果,最終達到我們要求的壓測指標,
四、如何在服務器上跑壓力測驗
上述我們是在windows的界面開發下進行的壓力測驗,一般在公司里,我們會搭建專門的施壓服務器,用于進行壓力測驗,
首先把我們的服務部署到服務器上去:

在壓測服務器上需要安裝jdk,配置Jmeter環境,上傳apache-jmeter-5.4.tgz到服務器解壓
Jmeter命令引數解釋:

利用GUI工具撰寫測驗計劃,生成一個jmx檔案(包括監控、聚合報告、tps、服務器資源監控等),上傳到服務器,
執行JMeter檔案:在Linux服務器中找到檔案所在的目錄,然后開始執行
jmeter -n -t /opt/test/獲取學生資訊.jmx -l result.jtl -e -o /opt/test/result

執行完畢后將jtl檔案下載到本地,利用GUI工具可以查看壓測結果,
Jmeter多機壓測(分布式壓測),在有些時候,我們的壓測服務器單機產生的請求量不一定能夠滿足壓測要求,這個時候我們需要開多臺壓測服務器協調,
分別在兩臺機器上安裝jmeter軟體,一臺是控制機,一臺是Agent節點
在Agent節點的jmeter.properties上修改 server.rmi.ssl.disable=true
啟動Agent:jmeter-server -Djava.rmi.server.hostname=<Ip>
修改控制機配置jmeter.properties remote_hosts=121.36.136.241:1099
啟動控制機: jmeter-server
執行壓測腳本,多一個引數 -r 表示全部agent啟動并參與測驗
jmeter -n -t /opt/test/獲取學生資訊.jmx -r -l result.jtl -e -o /opt/test/result

在Agent節點上也會列印2行日志 
五、Jmeter安裝插件拓展功能
Jmeter作為一個開源工具,相比一些商用工具(如LoadRunner),在功能上就稍顯不足,好在Jmeter可以集成第三方插件來豐富功能,
插件下載地址:??????jmeter-plugins.org
下載plugins-manager.jar檔案后,將其放入jmeter的安裝目錄的lib/ext目錄下,重啟jmeter


重啟后,我們為壓測腳本添加監聽器可以用來監測介面回應時間和tps的變化情況:



在做壓測的時候,我們除了關心介面性能的指標資料外,還有一點非常重要,我們也要時刻關注服務器資源的消耗情況,試想一下,如果服務器費了九牛二虎之力跑出了我們需要的性能指標,但是服務器消耗過大,隨時都有宕機的風險,這樣的壓測結果沒有任何意義,但是我們怎么監測服務器性能呢?如下:
我們需要安裝PerfMon插件

同時我們在服務器也需要開啟一個Agent

總結:
壓力測驗只能幫我們發現程式中的性能問題,但是它并不能幫我們解決問題,我們程式員除了要掌握壓測的能力外,更重要的是優化程式的能力,包括但不限于資料庫連接池調優、引入快取、序列化調優、JVM調優、容器調優等,同時我們還需要不斷監控服務器的CPU、記憶體、磁盤等硬體情況,我們要達到的目的是服務器能夠在維持硬體資源正常作業的狀態下,讓我們的介面性能達到最優,
本次用到的軟體:
鏈接:https://pan.baidu.com/s/1YajIPjQgqrtBNEtAvs-58A
提取碼:xdjl
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300219.html
標籤:其他
