最近公司開發了一套新產品,採用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 速度...