回覆列表
  • 1 # 物聯網全棧開發

    我們碰到過ngnix的類似情況,可能有參考意義。

    該伺服器提供裝置韌體上傳功能,使用者可以透過裝置的網頁前端上傳裝置韌體,以後後端程式將韌體升級到裝置。

    裝置的韌體大概有100多M大小,我們在ngnix服務端編寫LUA指令碼接受前端網頁提交的資料包。

    在整個接受過程中CPU的佔用率高達100%,裝置整體反應變慢,甚至偶爾崩潰重啟。

    後來我們研究了ngnix相關配置,沒有找到相關的配置,甚至交叉編譯了相關的模組,也只能配置下載的負荷。

    後天我們修改LUA指令碼,在收到一個數據包處理之後,sleep毫秒級時間,整個上傳數率稍有下降,但是cpu利用率下降到了40%左右,系統穩定性大大增加。

    我想node.js應該也是類似原因,樓主也可以用這種思路,在做一段時間運算以後,sleep一段時間,釋放資源給系統。

    如果是多核cpu,樓主可以做一些合理配置。

  • 2 # 廖亮

    密集計算會彪高cpu,這種情況是正常的。相當於你拿很重的東西必須要這麼大的力氣才拿得起。

    最佳化:

    分析程式碼確保沒有空耗cpu的無用程式碼,比如無限迴圈等。

    透過一些演算法進行最佳化,比如一些空間換時間的演算法。

    平行計算(因為nodejs不能直接操作執行緒,可以使用child_process多程序模式利用多核運算)。

    如果最佳化程式碼不能實現預想的效果,可以考慮c++這種執行效率比v8更高的實現,透過node-gyp編譯為原生模組。

    nodejs對於cpu密集計算可怕之處是堵塞eventloop,導致後續任務無法執行,無法發揮併發優勢,對於一個處理請求的伺服器是致命的。解決這個問題可以使用child_process建立子程序,或者換計算能力更強的機器提供微服務。

  • 中秋節和大豐收的關聯?
  • 腦卒中發病前有哪些早期訊號?