在Linux上优化Node.js应用可以通过多个方面来实现,包括系统配置、Node.js运行时优化、代码优化等。以下是一些常见的优化策略:
调整文件描述符限制:
ulimit -n
命令查看当前文件描述符限制。/etc/security/limits.conf
文件,增加文件描述符限制,例如:* soft nofile 65536
* hard nofile 65536
调整内核参数:
/etc/sysctl.conf
文件,添加或修改以下参数:net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.ip_local_port_range = 1024 65535
sysctl -p
使配置生效。使用SSD:
使用最新版本的Node.js:
调整事件循环策略:
--harmony
标志启用V8引擎的最新特性。--max-old-space-size
调整V8堆内存大小,例如:node --max-old-space-size=4096 app.js
使用集群模式:
cluster
模块创建多个工作进程。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`);
}
使用PM2管理Node.js应用:
npm install pm2 -g
pm2 start app.js -i max
减少I/O操作:
优化数据库查询:
join
或subquery
优化。使用异步编程:
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
减少内存泄漏:
process.memoryUsage()
监控内存使用情况。使用性能分析工具:
profiler
模块或第三方工具如clinic.js
进行性能分析。node --inspect app.js
通过以上策略,可以显著提升Node.js应用在Linux上的性能。根据具体应用场景和需求,选择合适的优化方法。