[後端] Node.js+MongoDB 常見性能問題

Node+Mongodb 架構常見性能問題總結
https://zhuanlan.zhihu.com/p/56010506

常見現象1:Web 服務超時,node 服務記憶體佔用高。Mongodb CPU,IOPS高

node 每增加一個回檔/promise 非同步任務,都會創建 一個microtask到執行佇列,由於太多的microtask等待處理完成,新的microtask 在任務佇列的尾端,得不到處理,web QPS 也因此迅速下降,造成 web 服務記憶體佔用高。這種情況一般是後端 Mongodb 處理不及時拖累 node 服務,這是最常見的性能問題。

常見現象2:Web 服務超時,node 服務記憶體略高,Mongodb CPU,IOPS 都正常

這種情況下資料庫並沒有太大壓力,但依然回應慢。
這個問題依然要回到 node 的執行機制, node 服務裡很多執行時間比較久的microtask沒有完成,造成任務佇列迅速累積,由於代碼邏輯流程問題,但不一定是因為資料庫回應不及時。
如一個訂單複雜的處理流程,要去不同的服務介面較驗或者每個資料庫操作也很短,但等待有多個步驟完成,整個流程累計執行時間較長。

常見現象3:大的迴圈下,處理速度越來越慢

node 是單執行緒執行,在這個同步代碼中,GC 沒有機會運行。這種情況在寫腳本遍歷整個資料庫的時候也經常發生。


#非同步, microtask, 處理不及, 複雜操作, 等待過久, 單執行緒未放CPU, 無法GC

留言