使用最新穩定版Node.js
新版本通常包含性能改進、bug 修復和內存管理優化,能直接提升應用運行效率。在CentOS上可通過NodeSource倉庫安裝最新版,例如:
curl -sL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
優化內存管理
--max-old-space-size參數擴大V8引擎的舊生代內存(默認1.5GB),避免內存溢出。例如設置為4GB:export NODE_OPTIONS="--max-old-space-size=4096"
removeListener),使用memwatch-next或heapdump工具定位泄漏(例如生成堆快照分析內存占用)。利用集群模塊充分利用多核CPU
Node.js為單線程模型,通過cluster模塊創建多個工作進程(數量等于CPU核心數),共享端口實現負載均衡。示例代碼:
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
for (let i = 0; i < os.cpus().length; i++) cluster.fork();
cluster.on('exit', (worker) => cluster.fork()); // 進程崩潰時自動重啟
} else {
require('./app.js'); // 工作進程啟動應用
}
使用反向代理(如Nginx)優化請求處理
Nginx可作為前端代理,處理靜態文件緩存、SSL卸載和負載均衡,減輕Node.js負擔。例如Nginx配置負載均衡:
http {
upstream node_app {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
}
server {
listen 80;
location / {
proxy_pass http://node_app;
proxy_set_header Host $host;
}
}
}
啟用緩存減少重復計算
node-cache或Redis緩存頻繁訪問的數據(如數據庫查詢結果、會話信息),降低響應時間。例如node-cache用法:const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 60 }); // 緩存60秒
const data = cache.get('key') || (cache.set('key', fetchData(), 60), fetchData());
expires頭緩存靜態資源(如CSS、JS),減少服務器請求。優化數據庫訪問
mysql2或pg-pool模塊復用數據庫連接,避免頻繁創建/銷毀連接的開銷。例如mysql2連接池:const mysql = require('mysql2/promise');
const pool = mysql.createPool({ host: 'localhost', user: 'root', database: 'test', waitForConnections: true, connectionLimit: 10 });
SELECT指定字段而非SELECT *)。使用異步編程避免阻塞事件循環
優先使用async/await或Promise處理I/O操作(如文件讀寫、數據庫查詢),避免同步函數(如fs.readFileSync)阻塞事件循環。例如異步讀取文件:
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('file.txt', 'utf8');
console.log(data);
} catch (err) { console.error(err); }
}
使用流式處理大數據
處理大文件或網絡流時,使用Stream模塊分塊讀取/寫入數據,減少內存占用。例如讀取大文件的流式處理:
const fs = require('fs');
const readStream = fs.createReadStream('large_file.txt');
readStream.on('data', (chunk) => console.log(`Received ${chunk.length} bytes`));
readStream.on('end', () => console.log('Finished reading'));
實施監控與性能分析
PM2監控應用內存、CPU使用率,實現自動重啟和負載均衡。例如:pm2 start app.js --name "my-app" --max-memory-restart 4096M
--inspect參數啟動調試,使用Chrome DevTools分析內存快照和CPU性能;或使用New Relic、Datadog等工具監控實時性能指標。調整系統配置
/etc/security/limits.conf添加:* soft nofile 65535
* hard nofile 65535