Koa.js 與PM2不嚴謹的壓力測試

Koa.js 與PM2不嚴謹的壓力測試

Koa.js 與PM2不嚴謹的壓力測試

本篇將使用Plow 測試Koa.js

PM2的加持下,Koa.js能提升多少性能

寫這篇時也沒什麼想法,不是很嚴謹,就單純好奇~~

本次測試重點: 每秒能處理多少個請求Reqs/s

MySQL是順帶的,剛好有一些需求,每個user需要每秒傳輸這麼多的數據

之後有空會再使用我的Pro(破)CPU從Koa.js調用MySQL的極限


本次的Koa.js的DB使用ES6的Promise的Async/Await

因為Koa.js的特性
e.g. 同時有10個使用者呼叫"http://localhost/api/testAPI/"這組API
若該API需要耗時10s,則總共需要花費100秒才能完成這些開銷
(可自行寫個For迴圈去卡API驗證,作者懶)
再加上async/await,等待DB回應時,會造成該API阻塞
此時丟給Child Processes處理,就可以同時處理這十個使用者

設定維護也麻煩。所以都丟給PM2處理,這難道不香嗎? oh! 我沒K

系統環境:

OS: Windows 10 專業版
CPU: I7-11700(8c16t)
RAM: 32GB
DB: MySQL community-8.0.34.0
--node.js環境---
node.js: v16.20.1
PM2: 5.3.0
koa: 2.14.1
mysql2: 3.2.0

* plow ip -c 20 -d 5m -> 同時20個連線,無請求總數,測試5分鐘最大的reqs/s
* plow ip -c 20 -n 10000 -d 10s -> 同時20個連線,共1萬請求總數,測試10秒的reqs/s

經過長時間(5 min)測試和短時間(1 min)測試,

差不了多少(正負幾百),因此統一擷取10秒壓力測試圖(主要是懶的合併圖片)


測試環境v1:

MySQL max_connections (DB最大連線數) : 151 (default)
DB Pool(DB連線池): 10
DB File Size: 50.25kb
PM2: Close
將Plow 的請求設為10000
(請求數過高會拉長時間, 通常用來測API的穩定度, 已經測過了, 不會炸, 差不了多少)

測試環境v2:

MySQL max_connections (DB最大連線數) : 151 (default)
DB Pool(DB連線池): 10
DB File Size: 50.25kb
PM2: Fork
將Plow 的請求設為10萬(掛上PM2後,設1萬太快,沒辦法截圖XD)

測試環境v3:

MySQL max_connections (DB最大連線數) : 151 (default)
DB Pool(DB連線池): 10
DB File Size: 50.25kb
PM2: Cluster 10
將Plow 的請求設為50萬(處理更快,也是沒辦法截圖XD)

額外測試:

MySQL max_connections (DB最大連線數) : 151 (default)
DB Pool(DB連線池): 10
DB File Size: 1筆
PM2: Cluster 10
koa.js+mysql2 最多到2萬筆左右(參數可以再調整,大概就這樣)

測試小總結:

  • 同時連線數越多,延遲越高(廢話XD)
  • 建議在生產環境時,掛上PM2以提升效能(另外開滿線程沒比較好,自行判斷)
  • DB畢竟全部採用Default,但夠我用了,以後再測吧
  • 作者的Pro(破)CPU,最多40000 Reqs/s
  • 單純調高DB Pool連線池沒意義,因為DB沒調整

理論上要在同環境下開其他Web Service比較
不過要有空,可能會使用Go(Golang)的Gin來對比...