優化 Linux 下的 Node.js 性能可以通過多個方面來實現,包括系統配置、Node.js 應用程序代碼優化、以及使用一些工具和技巧來提高性能。以下是一些常見的優化方法:
增加文件描述符限制:
ulimit -n 65535
這可以增加 Node.js 應用程序可以同時打開的文件描述符數量。
調整內核參數:
編輯 /etc/sysctl.conf
文件,添加或修改以下參數:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
然后運行 sysctl -p
使更改生效。
使用異步操作: 盡量使用異步 API 來避免阻塞事件循環。
減少內存使用:
使用 Buffer
和流來處理大文件,避免一次性加載大量數據到內存中。
優化循環和遞歸: 確保循環和遞歸操作高效,避免不必要的計算。
使用緩存: 對于頻繁訪問的數據,使用內存緩存(如 Redis 或 Memcached)來減少數據庫查詢次數。
Node.js 內置的性能分析工具:
node --inspect-brk app.js
然后使用 Chrome DevTools 進行性能分析。
第三方性能分析工具:
clinic.js
:一個綜合性的 Node.js 性能分析工具。pm2
:一個進程管理器,可以監控和優化 Node.js 應用程序的性能。cluster
模塊來創建多個工作進程,充分利用多核 CPU。const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
啟用 TurboFan: Node.js 默認使用 TurboFan 優化 JIT 編譯器,確保你的 Node.js 版本是最新的。
使用 --max-old-space-size
參數:
增加 V8 引擎的堆內存大小。
node --max-old-space-size=4096 app.js
npm install pm2 -g
pm2 start app.js -i max
通過以上方法,你可以顯著提高 Linux 下 Node.js 應用程序的性能。根據具體情況選擇合適的優化策略,并持續監控和調整以達到最佳性能。