使用最新稳定版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