web系統後端接口壓測報告


一、測試目的

針對uat環境的用戶併發量和系統瓶頸,都是未知的。
本輪壓力測試,抽取部分代表性查詢接口,主要是爲了測試後臺系統UAT環境主要接口吞吐量和響應時間,初步找出系統的瓶頸。

二、測試內容

壓測接口清單

  • api/nonmetalPla/list(pla(post))
  • api/warehouse/searchCarType (查詢基礎數據(post) )
  • api/dict/findDictByParentCode (根據父類編碼查詢下級字典(post) )
  • 壓測數據庫查詢m_dict數據 (jdbc連接 )

三、測試環境

環境 機器型號 CPU 操作系統 內存 磁盤
應用服務器 linux虛擬機 CPUIntel® Xeon® Gold 6132 CPU @ 2.60GHz
4個單核四線程
CentOS Linux release 7.5.1804 (Core) 單機 total:8G ,可用內存: free+buffers/cached = 2.3G tatal:26G used:15G
壓測機器 宏碁4750 單個雙核四線程 win10 單機 8G total:8G used:3G

四、測試方法

4.1、壓測工具和指標

類別 說明
壓測工具 apache-jmeter-5.1.1(單臺win環境)
壓測性能相關參數 協議: http
方法: get/post
併發數 、總請求數、吞吐率(TPS)、響應時間、錯誤率

4.2、測試時間

第一輪壓測:
測試時間:9:00-12:00(工作時間) ,內網環境壓測(VPN內網,非完全內網
針對每個接口分別執行併發數10、30、90、270併發數執行120秒
第二輪壓測:
測試時間:7:50-09:30(工作時間) ,內網環境壓測(VPN內網,非完全內網
針對每個接口分別執行併發數10、30、90、270併發數執行120秒
第三輪壓測:
測試時間:09:00-09:30(工作時間) ,內網環境壓測(VPN內網,非完全內網
針對pla接口30併發數執行120秒

五、統計指標

進行壓力測試,並對產生的每秒TPS,響應時間(min,ave,max)及錯誤率進行統計

六、測試結果

6.1、第一輪壓測

時間:9:00-12:00(工作時間)

6.1.1、聚合報告
接口名稱 數據量 併發數 持續時間 samples average min max median 90%Line 95%Line 99%Line error% tps(s) received(kb/s) sent(kb/s)
pla(post) limit 10 120s
api/nonmetalPla/list 10 5113 233 73 2458 191 345 408 827 0 42.41921434 1672.45209 21.91383241
api/nonmetalPla/list 30 5323 673 146 8692 543 1196 1561 2619 0 43.96775313 1733.505954 22.71380996
api/nonmetalPla/list 90 6224 1737 161 26447 1262 3238 4445 8283 0 49.34982556 1945.703621 25.49419699
api/nonmetalPla/list 270 7586 4298 155 44290 3359 7611 9445 15606 0 59.22213375 2334.936724 30.59424683
查詢基礎數據(post) limit 10
/api/warehouse/searchCarType 10 2602 459 113 3458 393 692 937 1496 0 21.5274388 1078.600366 11.28929163
/api/warehouse/searchCarType 30 4456 805 105 7980 670 1369 1712 2686 0 36.9694355 1852.298689 19.38729186
/api/warehouse/searchCarType 90 5044 2150 172 11822 1781 3441 4277 6622 0 41.092654 2058.886432 21.54956562
/api/warehouse/searchCarType 270 6504 5022 154 79084 3997 8100 10222 17749 0 51.1437356 2562.480956 26.82049416
根據父類編碼查詢下級字典(post) limit 10
/api/dict/findDictByParentCode 10 652 1842 225 12681 1505 2617 5084 6542 0 5.201643464 3.682313378 2.722735251
/api/dict/findDictByParentCode 30 1942 1861 267 11447 1489 3467 4896 6968 0 15.58337346 10.10484372 8.156922043
/api/dict/findDictByParentCode 90 5464 1986 284 23215 1604 2840 5219 6941 0 43.72669217 28.97468862 22.88819043
/api/dict/findDictByParentCode 270 16931 1921 72 14632 1505 3356 5021 6597 1.07 131.6268411 88.65045632 68.13092412
jdbc連接 limit 10
壓測數據庫查詢m_dict數據 10 17390 66 10 13343 40 116 179 312 0 145.2 145.46 0
壓測數據庫查詢m_dict數據 30 18909 181 10 8165 118 351 474 845 0 157.5 157.78 0
壓測數據庫查詢m_dict數據 90 15052 709 13 12010 538 1106 1566 6648 0.48 125.1 124.78 0
壓測數據庫查詢m_dict數據 270 19391 1681 13 10848 1517 2593 3232 7707 0 158.1647635 158.47 0
6.1.2、接口壓測實況圖(90併發)

下面抽取併發量爲90的情況下各個測試接口的資源情況,分別是內存和cpu狀況圖、響應時間、tps
在這裏插入圖片描述
在這裏插入圖片描述

一、api/nonmetalPla/list((post))

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
二、/api/warehouse/searchCarType (查詢基礎數據(post) )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
三、/ api/dict/findDictByParentCode (根據父類編碼查詢下級字典(post) )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
四、壓測數據庫查詢m_dict數據 (jdbc連接 )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

6.1.3、第一輪壓測分析
  • 帶寬、內存、內存、磁盤等指標在網頁查看一直表現的比較正常,在命令行直接進去服務器查看,cpu有超過100%的幾次狀況。
  • 併發數在90以內時,接口響應時間基本能保證在2s內
  • 普通數據庫查詢接口tps有提升空間,pla接口在10-270的併發下均能保持40tps以上
  • warehouse查詢(post) 接口相比pla接口仍較慢,可做進一步優化,考慮字段過多,sql查詢方面的問題
  • 根據父類編碼查詢下級字典(post)接口耗時非常嚴重,需要比較優先優化,考慮索引和sql方面的問題
  • 數據庫壓測tps只有120-150左右,需要進一步提高,考慮服務器性能方面和mysql配置問題,在非工作時間有嘗試壓測
  • 對於接口耗時較長的情況,目前引入了redis,但是目前用的地方很少,redis幾乎閒置,接口可以考慮結合使用redis

一次壓測數據不一定是準確的,有主要以下幾點

  • 服務器網絡變化
  • 服務器性能改變
  • 壓測主機網絡變化
  • DB數據量的變化
  • 壓測過程中部分請求 error / 超時影響

6.2、第二輪壓測

壓測時間:07:50-9:30(工作時間)

6.2.1、聚合報告
接口名稱 數據量 併發數 持續時間 samples average min max median 90%Line 95%Line 99%Line error% tps(s) received(kb/s) sent(kb/s)
pla(post) limit 10 120s
api/nonmetalPla/list 10 TOTAL 4038 296 95 9299 233 496 630 934 0 33.49841965 1330.286362 17.30533593
api/nonmetalPla/list 30 TOTAL 5134 698 76 7882 602 921 1107 3601 0 42.68835175 1695.236156 22.05286921
api/nonmetalPla/list 90 TOTAL 5830 1873 157 12518 1717 2293 3515 5551 0 47.52472019 1887.297604 24.55134471
api/nonmetalPla/list 270 TOTAL 5130 6483 459 26515 5727 10125 11911 16345 0 40.1323664 1593.733086 20.73244319
basedata(post) limit 10
/api/warehouse/searchCarType 10 TOTAL 4272 451 94 17898 426 615 676 853 0.002340824 22.09544695 2040.372722 11.56003959
/api/warehouse/searchCarType 30 TOTAL 3028 1186 187 4492 1120 1586 1807 2567 0 25.12883924 2325.840943 13.17791667
/api/warehouse/searchCarType 90 TOTAL 2146 5096 264 37961 3563 10678 14950 24020 0 16.60528026 1536.928958 8.708042481
/api/warehouse/searchCarType 270 TOTAL 2916 11779 257 55320 10512 17029 20018 27637 0 21.09649694 1952.620886 11.06329966
根據父類編碼查詢下級字典(post) limit 10
/api/dict/findDictByParentCode 10 TOTAL 31344 37 19 3256 28 37 56 245 0 261.1586499 392.5030881 136.7002308
/api/dict/findDictByParentCode 30 TOTAL 69339 51 21 7120 42 58 132 215 0 577.6083969 868.1048074 302.3418952
/api/dict/findDictByParentCode 90 TOTAL 87335 122 22 14538 94 219 274 500 0 727.2886254 1093.063666 380.6901398
/api/dict/findDictByParentCode 270 TOTAL 94655 339 22 6125 296 451 496 1331 0 786.713432 1182.374973 411.7953121
jdbc連接 limit 10
壓測數據庫查詢m_dict數據 10 查詢 43653 24 9 4549 18 30 44 139 0 363.6689299 364.3792208 0
壓測數據庫查詢m_dict數據 30 查詢 19069 187 20 22843 83 341 521 981 0 158.7694101 159.0795066 0
壓測數據庫查詢m_dict數據 90 查詢 31774 333 10 9448 231 576 805 1814 0 264.096682 264.6124958 0
壓測數據庫查詢m_dict數據 270 查詢 27057 1196 26 15632 902 2004 2398 4520 0 222.8252366 223.2604421 0
6.2.2、接口壓測實況圖(90併發)

下面抽取併發量爲90的情況下各個測試接口的資源情況,分別是內存和cpu狀況圖、響應時間、tps
在這裏插入圖片描述
在這裏插入圖片描述
一、api/nonmetalPla/list((post))
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
二、/api/warehouse/searchCarType (查詢基礎數據(post) )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
三、/ api/dict/findDictByParentCode (根據父類編碼查詢下級字典(post) )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
四、壓測數據庫查詢m_dict數據 (jdbc連接 )
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

6.2.3、第二輪壓測分析
  • 二輪壓測發現pla接口和warehouse接口都是比較相近的tps結果數據,
  • 數據字典接口翻了將近10倍,其數據也是不多的,但是結果差別如此的大。
  • 壓測數據庫查詢tps也翻了一倍,
    根據以上幾個現象,首先能確定的是雖然內網環境,但是走vpn的情況下,網絡存在不穩定,當前數據庫僅該後臺系統在使用,說明數據傳輸的耗時主要受網絡方面的影響大。
    結合第一輪壓測出現的一些問題,兩輪下來,需要第三輪的測試,
    第三輪主要是判斷數據量大小的網絡傳輸,是否明細影響壓測結果

6.3、第三輪壓測

6.3.1、聚合報告
接口名稱 數據量 併發數 持續時間 samples average min max median 90%Line 95%Line 99%Line error% tps(s) received(kb/s) sent(kb/s)
pla(post)
api/nonmetalPla/list 10 30 120s 5207 689 74 5609 608 1054 1356 2167 0 43.3 1717.91 22.35
api/nonmetalPla/list 1 30 120s 17408 205 48 5707 113 317 472 2120 0 144.8 629.9 74.65
api/nonmetalPla/list 0 30 120s 47035 75 24 21001 52 120 187 321 0 391.8 171.41 208.88

在這裏插入圖片描述

6.3.2、接口壓測實況圖(30併發)

下面抽取併發量爲30壓測的情況下各個測試接口的資源情況,分別是內存和cpu狀況圖、響應時間、tps
壓測接口:api/nonmetalPla/list((post)
併發量:30
在這裏插入圖片描述
在這裏插入圖片描述

一、查詢0條
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
二、查詢1條
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
三、查詢10條
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

6.3.3、第三輪壓測分析
  • 數據量大小的網絡傳輸影響非常大
  • 數據量越小傳輸越快,當前VPN的內網受VPN或內網網速影響較大
  • 接口的數據量有必要縮減,會有明細的tps提升

七、結論

結合壓測一、二、三分析,得到以下一些結論和建議:

  • 主要問題在網絡環境,網絡的提升對壓測tps的影響非常大。

  • 工作時間的早上剛上班期間,服務器和帶寬都是比較寬裕的狀況,這幾個目標接口的壓測結果tps都提高了很多,vpn連接的內網壓測對數據的準確性仍然有一定的影響

  • 在網絡正常的情況下,接口tps仍然只能在50左右。

  • 服務器性能不是非常穩定,虛擬linux多個地方共用主機導致有波動,也影響接口性能,單獨部署到一臺服務器會事比較好的選擇

  • 數據庫壓測tps120-150,200+均出現,從二輪壓測可以看出,除了網絡之外,數據庫tps仍可以繼續提高,本地機器能達到1000tps,可以向着這個目標接近。

  • 所有接口不需要的字段儘量縮減不返回到前端,可做進一步優化,考慮字段過多,sql查詢方面的問題

  • 對於接口耗時較長的情況,目前引入了redis,但是目前用的地方很少,redis幾乎閒置,接口可以考慮結合使用redis

  • 考慮下一輪的壓測中直接在機房另一臺linux/win下專門壓測,並使用命令行方式直接導出報告的方式節省工作量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章