Mall商城的高级篇的开发(二)性能压测和性能监控
Mall商城的高級篇的開發(fā)(二)
性能壓測–壓力測試
壓力測試考察當前軟件硬件環(huán)境下系統(tǒng)所能承受的最大負荷并幫助找出系統(tǒng)的瓶頸所在。壓測都是為了系統(tǒng)在上線的處理能力和穩(wěn)定性維持在一個標準的范圍內(nèi),做到心中有數(shù)。
使用壓力測試,我們有希望找到很多種用其他測試方法很難發(fā)現(xiàn)更多的錯誤。有兩種錯誤類型是:內(nèi)存泄露、并發(fā)與同步。
有效的壓力測試系統(tǒng)將應用在一下這些關鍵條件:重復、并發(fā)、量級、隨機變化
性能指標
性能指標是來整體把握整個系統(tǒng)的狀況。
- 響應時間(Response Time:RT):響應時間指用戶從客戶端發(fā)起一個請求開始,到客戶端接受到從服務器端返回的響應結(jié)束,整個過程所耗費的時間。
- HPS(Hits Per Second),每秒點擊次數(shù),單位是次/秒。
- TPS(Transaction per Second),系統(tǒng)每秒處理交易數(shù),單位是筆/秒。
- QPS(Query per Second):系統(tǒng)每秒處理的查詢數(shù),單位是次/秒。對于互聯(lián)網(wǎng)的業(yè)務中,如果某些業(yè)務有且僅有一個請求連接,那么TPS=QPS=HPS,一般情況下用TPS來衡量整個業(yè)務的流程,用QPS來衡量接口查詢次數(shù),用HPS來表示對服務器的單擊請求。
- 無論TPS、QPS、HPS,此指標是衡量系統(tǒng)處理能力非常重要的指標,越大越好,根據(jù)經(jīng)驗,一般情況下:
- 金融行業(yè):1000TPS~50000TPS,不包括互聯(lián)網(wǎng)化的活動
- 保險行業(yè):100TPS~100000TPS,不包括互聯(lián)網(wǎng)的活動
- 制造行業(yè):10TPS~5000TPS
- 互聯(lián)網(wǎng)電子商務:10000TPS~10000000TPS
- 最大響應時間(Max Response Time)指用戶發(fā)出請求或者指令到系統(tǒng)作出反應(響應)的最大時間。
- 最少響應的時間(Mininum Response Time)指用戶發(fā)出請求或者指令到系統(tǒng)作出反應(響應)的最少時間
- 90%響應時間(90% Response Time)是指所有用戶的響應時間進行排序,第90%響應時間
- 從外部看,性能測試主要關注如下的指標
- 吞吐量:每秒鐘系統(tǒng)能處理的請求數(shù)、任務數(shù)
- 響應時間;服務處理一個請求或一個任務的耗時
- 錯誤率:一批請求結(jié)果中出錯的請求所占的比例。
JMeter
安裝
官方下載地址:Apache JMeter - Download Apache JMeter
啟動命令。
JMeter壓測示例
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kukZVrjB-1652189323113)(/Users/wanglufei/Library/Application Support/typora-user-images/image-20220407152653269.png)]
壓測我們的首頁
壓測步驟
壓測結(jié)果截圖
影響性能的考慮點
數(shù)據(jù)庫、應用程序、中間件(tomcat、nginx)、網(wǎng)絡和操作系統(tǒng)等方面
優(yōu)化的點:應該考慮自己的應用場景屬于CPU密集型還是IO密集型
性能監(jiān)控
JVM內(nèi)存模型
JVM的相關筆記:JVM_BearBrick0的博客-CSDN博客
堆
在堆內(nèi)存中,存在幾乎90%的對象實例,所有的對象實例以及數(shù)組都要在堆上分配。堆是垃圾收集器管理的主要區(qū)域,也被稱為GC堆;也是我們優(yōu)化考慮最多的地方。
堆的劃分可以參考上面提出的相關筆記。
堆的一次性完成GC的流程:
后面會總結(jié)完成的GC流程,先立個Flag。
在做壓力測試期間,我們應該對堆中內(nèi)存來進行監(jiān)控,包括CPU線程等指標。
JConsole與JVisualvm
JDK的兩個小工具JConsole、JVisualvm(升級版的Jconsole),通過命令行啟動,可監(jiān)控本地和遠程應用。遠程應用需要配置
JConsole
在命令行使用Jconsole,命令便可彈出控制面板:
找到我們的Product服務
Jvisualvm
可以監(jiān)控內(nèi)存泄漏,跟蹤垃圾回收,執(zhí)行時內(nèi)存、CPU分析、線程分析…
使用JMeter做壓力測試,并做性能監(jiān)控
整個項目的訪問流程圖
測試我們的中間件Nginx
編寫測試計劃,和上面的步驟相差不大,需要注意的是需要配置自己Nginx的IP地址。
監(jiān)控Nginx的狀態(tài)
docker stats測試結(jié)果:
出現(xiàn)的異常
結(jié)果報告
測試我們的網(wǎng)關服務Gateway
接口的壓力測試步驟和上面類似,這里監(jiān)控CPU和內(nèi)存的使用情況我們使用visualvm:
這里主要監(jiān)控CPU和內(nèi)存的使用情況
編寫簡單服務測試
@GetMapping("/hello") @ResponseBody public String hello() {return "hello"; }壓測的數(shù)據(jù)表格
| Nginx | 50 一直循環(huán) | 25998 | 3 | 7 |
| Gateway | 50 一直循環(huán) | 27823 | 2 | 8 |
| 測試簡單服務 | 50 一直循環(huán) | 38513 | 2 | 6 |
| Gateway+簡單服務 | 50 一直循環(huán) | 12693 | 5 | 57 |
| 全鏈路 | 50 一直循環(huán) | 1008 | 68 | 321 |
| 首頁渲染一級菜單 | 50 一直循環(huán) | 264(db、thymeleaf) | 90 | 234 |
| 三級分類的數(shù)據(jù)獲取 | 50 一直循環(huán) | 27(db、thymeleaf) | 2523 | 3295 |
| 首頁全量數(shù)據(jù)的獲取 | 50 一直循環(huán) | 2(靜態(tài)資源)、(優(yōu)化之后)19 | 38881 | 429 |
| 首頁渲染(開啟緩存、優(yōu)化數(shù)據(jù)庫(給字段加索引)、降級日志的界別) | 50 一直循環(huán) | 280 | 388 | 1547 |
| 三級分類的數(shù)據(jù)獲取(優(yōu)化查詢的業(yè)務邏輯) | 50 一直循環(huán) | 467 | 219 | 335 |
根據(jù)數(shù)據(jù)可以看出,我們應該優(yōu)化的一個方向:
- 中間件越多,性能損失越大,大多數(shù)的原因都是由于網(wǎng)絡之間的耗時
- 業(yè)務
- 模版引擎的渲染速度(緩存的開啟)
- db(Mysql的優(yōu)化)
- 給字段建立普通索引
- 靜態(tài)資源
JVM分析和調(diào)優(yōu)
結(jié)合JvisualVm來給伊甸園和老年代分配合理的內(nèi)存空間,主要目的是來減少Yong GC和Full Gc所帶來的時間的消耗。
Nginx的動靜分離
為了減少Tomcat的壓力,將靜態(tài)的配置文件都放到Nginx服務器中。來增加整體項目的
整體的效果圖:
流程圖:
效果圖:
操作流程
模擬線上應用內(nèi)存奔潰宕機
由于我們將靜態(tài)的文件都分配到了Nginx服務器中,而Tomcat只接受我們動態(tài)的請求,也就是做了動靜分離的效果,我們來看看吞吐量有沒有提升。
同時為了測試線上的真實效果,我們選擇打開thymelead的緩存。
總結(jié)
以上是生活随笔為你收集整理的Mall商城的高级篇的开发(二)性能压测和性能监控的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 录制回放java_使用Katalon R
- 下一篇: 自动取片机EMC测试,电磁兼容EMC整改