關於NODEJS效能測試和優缺點總結

2022-09-11 07:33:09 字數 3064 閱讀 1180

最近公司開發了一套新產品,採用nodejs前端+j**a後端框架,為完全的前後端分離結構,以下為相關資訊。

軟體及功能:

軟體功能

nginx

負責反向**和負載均衡

nodejs

前端**

jdk+tomcat

j**a後端**

mysql

資料庫服務

mongodb

客戶表單工作流資料庫服務

redis

token認證及快取

測試伺服器資訊

ip伺服器

cpu記憶體

空間192.168.1.11

nginx+nodejs+tomcat816

120g

192.168.1.12

mysql48

120g

192.168.1.13

mongodb+redis48

120g

192.168.1.14

nodejs816

120g

測試工具:

loadrunner+jmc 配合linux系統工具

測試情況:

為了更清楚的了解該系統的平靜點,對整個系統進行不同情況的效能測試。

測試過程如下:

1:採用4核cpu配置資源進行測試 (jvm調節為4g固定記憶體 永久代512m)

經測試在nodejs未開啟cluster時,tps為20左右,cpu佔用率約65%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約200,mysql約30 mongodb約30低。

從如上結果看:nodejs不開啟cluster不能充分利用cpu,tps過低。

2:採用8核cpu16g記憶體進行測試 (jvm調節為4g固定記憶體 永久代512m)

經測試在nodejs未開啟cluster時,tps為33左右,cpu佔用率約60%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約200,mysql約30 mongodb約30低。

從如上結果看:nodejs不開啟cluster不能充分利用cpu,tps過低。

3:採用8核cpu16g記憶體進行測試(jvm調節為4g固定記憶體 永久代512m)

nodejs開啟cluster為max,tps為80左右,cpu佔用率約92%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約900,mysql約200 mongodb約230低。

4:採用8核cpu16g記憶體進行測試 (jvm調節為4g固定記憶體 永久代512m)

nodejs開啟cluster為4,tps為80左右,cpu佔用率約76%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約900,mysql約200 mongodb約230低。

5:將nodejs單獨劃分到另外一台機,採用同樣壓力測試

nodejs開啟cluster為8,tps為80左右,cpu佔用率約83%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約900,mysql約200 mongodb約230低。

6:nginx開啟負載均衡

採用兩台機安裝node方式(其中nginx+nodejs+tomcat一台,nodejs單獨一台)

和tomcat在同一臺的node開啟cluseter為4:單獨nodejs開啟cluster為max,tps為85左右,cpu佔用率約70%(其中tomcat占用約27%)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約900,mysql約200 mongodb約230低。

7:nginx開啟負載均衡 (加壓一倍進行測試)

採用兩台機安裝node方式(其中nginx+nodejs+tomcat一台,nodejs單獨一台)

和tomcat在同一臺的node開啟cluseter為4:單獨nodejs開啟cluster為max,tps為110左右,cpu佔用率約80%(其中tomcat占用約27%,但此時後端出現錯誤,因本次主要驗證nodejs效能,略去排查過程)記憶體:三颱機均有剩餘,mysql mongo+redis使用率極低 連線數:nodejs約900,mysql約200 mongodb約230低。

總結:

從如上測試情況看,nodejs為cpu密集型應用,效能和吞吐對cpu依賴嚴重,增加cpu核數後啟用cluster可以大大增加tps.但並不是cluster越多效能越優,本次測試採用8核的情況下cluster為4 的情況下 在保障tps最優情況下,cpu佔用率最優。開啟6 cluster cpu會公升高,tps不變。4核cpu以上的cluster cpu使用過高,會對其它軟體和系統帶來不穩定因素。以前曾看過一篇資料,nodejs的cluster開啟後,會啟動對應的程序,當採用單埠進入後,會有乙個分配機制選擇乙個最優的程序提供相應,當程序過多的時候,選舉過程會有消耗,這可能也是此次測試4cluster比max 8cluster 結果更理想的原因。另外如果nodejs是連線數過多,這種情況,開啟cluster並不能有效緩解,還需要負載均衡才能有效分流連線數。生產環境不宜開啟cluster為max(需要留1到2核和系統和j**a,以保障在某些情況下系統出問題的可能)

在開啟負載均衡的測試中,原測試壓力顯然不夠,測試壓力增加至一倍,tps也增加到110。此時後端報錯,這說明開啟負載均衡可以更好的充分利用2臺機器的cpu資源。

結論:若要提高tps,可增加cpu核數

一些個人關於nodejs的優缺點總結(非摘抄):

優點:

1.在少量業務邏輯的情況下,具有優異的效能,可支援高併發。響應延時理想。預設部署較便捷(nodejs+pm2)

2.啟動速度快,重啟時間短。

缺點:

效能測試調優

效能測試的目的就評估當前系統效能的指標,分析定位解決效能瓶頸,預防規避效能風險。效能分析是為了確定導致效能瓶頸的原因,而調優就是用來解決效能瓶頸。通過某些手段讓系統效能得到提高,是效能調優的主要目的。效能分析主要有兩種方法 1.將測試結果與使用者需求做比較,如果達到使用者需求,則測試通過。系統滿足1...

AsyncTask 和Handler 的優缺點比較

asynctask 實現的原理和優缺點 優點 快捷 方便 缺點 當執行多個後台任務,和並需要ui 變更起來就比較複雜 handler 實現的原理和優缺點 優點 簡單 清晰 缺點 當執行單個後台任務,顯得 過多,結構複雜 相對性 asynctask 介紹 android 的asynctask 比han...

hibernate和mybatis的優缺點

mybatis的優點 1 易於上手和掌握,提供了資料庫查詢的自動物件繫結功能 2 sql寫在xml裡,便於統一管理和優化,解除sql與程式 的耦合。3 提供對映標籤,支援物件與資料庫的orm欄位關係對映 4 提供物件關係對映標籤,支援物件關係組建維護 5 提供xml標籤,支援編寫動態sql。6 速度...