Nodejs 效能提示
Nodejs 效能提示。
nodejs預設使用多少個執行緒
在典型的 Node.js 進程中,使用的執行緒細目如下:
-
主執行緒:這是執行 Node.js 事件循環並執行 JavaScript 程式碼的單一執行緒。
-
Libuv 執行緒池:預設情況下,
libuv
建立一個有 4 個執行緒的執行緒池。這些執行緒用於處理非同步 I/O 操作,例如檔案系統任務和 DNS 查找。 -
V8 引擎線程:Node.js 使用 V8 JavaScript 引擎,該引擎本身利用了額外的線程。通常,V8 使用 2 個執行緒來執行垃圾回收和程式碼最佳化等任務。
如何增加 libuv
執行緒池的執行緒數
若要透過「libuv」增加 Node.js 中的執行緒池大小,請設定「UV_THREADPOOL_SIZE」環境變數:
UV_THREADPOOL_SIZE=64 node app.js
-
UV_THREADPOOL_SIZE
的最大值可以為1024
,一般建議設定為邏輯核心的數量,以優化 I/O 密集型任務的效能。如果沒有正當理由,將其設置得太高可能會導致開銷增加和潛在的效率低下。 -
在叢集設定中,每個工作進程都有自己的執行緒池,執行緒池的執行緒總數為
UV_THREADPOOL_SIZE * numberOfWorkers
。 -
對於 CPU 密集型任務,增加
UV_THREADPOOL_SIZE
可能不會帶來顯著的好處,並可能導致資源競爭。建議利用cluster
或worker_threads
模組。
如何調整或提高記憶體效能
利用 --expose-gc
選項
- Node.js 中的
--expose-gc
標誌用於公開垃圾回收(GC)功能,允許手動觸發垃圾回收。
node--expose-gc app.js
# 在程式碼中呼叫 global.gc() 來觸發垃圾回收
- 手動觸發垃圾回收可能暫停應用程式的執行,因為在 GC 期間所有其他操作都會停止。如果過度使用,可能會影響效能。應謹慎使用它,並且僅在特定情況下才使用。
調整 --max-old-space-size
值
-
Node.js 中的
--max-old-space-size
標誌用於設定 V8 引擎老生代堆的最大記憶體大小,該堆是儲存長壽命物件的地方。 -
--max-old-space-size
的值應基於可用的系統記憶體和應用程式的特定需求。例如,如果伺服器有 8 GB 的 RAM,則將其設為 6 GB,為其他進程留出空間並避免記憶體交換。
node--max-old-space-size = 6144 app.js
# 也可以使用環境變數進行設置,例如:
export NODE_OPTIONS="--max-old-space-size=6144"