选择合适的Node.js版本
确保使用最新的稳定版或LTS(长期支持)版本,新版本通常包含性能改进、bug修复及安全更新,能有效提升应用稳定性和执行效率。
优化系统配置(内核参数调整)
修改CentOS内核参数以提升网络和文件处理性能,编辑/etc/sysctl.conf文件,添加或调整以下参数:
net.ipv4.tcp_tw_reuse = 1:启用TCP连接复用,减少TIME_WAIT状态连接占用;net.ipv4.tcp_max_syn_backlog = 8192:增加半连接队列大小,应对高并发连接请求;net.core.somaxconn = 1024:增大监听端口的最大连接队列长度,避免连接被拒绝;fs.file-max = 65536:提高系统最大文件描述符数,支持更多并发文件操作。sudo sysctl -p使配置生效。利用多进程提升并发能力
通过Node.js内置的cluster模块创建多个工作进程,共享服务器端口,充分利用多核CPU资源。示例代码:
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork(); // 创建子进程
}
cluster.on('exit', (worker) => {
console.log(`Worker ${worker.process.pid} died, restarting...`);
cluster.fork(); // 进程崩溃时自动重启
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
}).listen(8000);
}
此方式可显著提升CPU密集型任务的并发处理能力。
使用反向代理(如Nginx)
配置Nginx作为反向代理,实现请求分发、静态文件缓存及SSL/TLS卸载,减轻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; # 请求分发到多个Node.js实例
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* \.(jpg|css|js)$ {
root /var/www/static; # 静态文件缓存
expires 30d;
}
}
}
通过负载均衡策略(如Round Robin),可有效提升应用的整体吞吐量。
代码层面优化
async/await或Promise替代回调函数,避免阻塞事件循环。例如,用fs.promises.readFile替代fs.readFileSync处理文件读取;Stream模块分块读取/写入,减少内存占用。示例:const fs = require('fs');
const readStream = fs.createReadStream('large_file.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream); // 流式复制文件
removeListener)、使用WeakMap/WeakSet处理循环引用;mysql2的pool)管理数据库连接,减少频繁连接/断开的开销。内存管理优化
--max-old-space-size参数设置V8引擎的堆内存上限(单位:MB)。例如,启动时添加node --max-old-space-size=4096 app.js将内存限制为4GB;也可通过环境变量配置:export NODE_OPTIONS="--max-old-space-size=4096";heapdump生成堆快照(node --inspect app.js后,在Chrome DevTools中分析),或memwatch-next监控内存泄漏,定位并修复问题。缓存策略
node-cache或Redis缓存频繁访问的数据(如会话信息、数据库查询结果),减少重复计算或数据库访问。示例(Redis):const redis = require('redis');
const client = redis.createClient();
client.get('user:1', (err, data) => {
if (data) {
console.log('Cached data:', JSON.parse(data));
} else {
// 从数据库获取数据
db.getUser(1).then(user => {
client.setex('user:1', 3600, JSON.stringify(user)); // 缓存1小时
console.log('Fresh data:', user);
});
}
});
使用进程管理工具(如PM2)
PM2是Node.js进程管理器,可实现进程守护、负载均衡、自动重启及内存监控。安装后启动应用:
npm install pm2 -g
pm2 start app.js --name "my-app" --max-memory-restart 4G # 内存超过4GB时自动重启
pm2 monit # 监控进程状态
PM2的集群模式可自动创建多个工作进程,提升并发处理能力。
性能监控与分析
使用工具定期监控应用性能,及时发现瓶颈:
performance.now()测量代码执行时间,或vm.performance分析内存使用;New Relic(实时性能监控、错误追踪)、Datadog(分布式追踪、日志分析)、Easy-Monitor(轻量级监控面板),帮助快速定位性能问题。