在CentOS系统上优化Node.js运行速度,需从硬件基础、系统配置、代码质量、进程管理、反向代理及监控工具六大维度综合施策,以下是具体策略:
sudo yum update -y更新CentOS系统至最新稳定版;通过NodeSource仓库安装最新稳定版Node.js(避免旧版本的性能缺陷)。node --max-old-space-size=4096 app.js # 设置旧生代内存上限为4GB(默认1.5GB)
node --max-new-space-size=512 app.js # 设置新生代内存上限为512MB(默认0.5GB)
根据服务器内存大小调整,避免因内存不足导致进程崩溃。async/await或Promise替代同步操作(如fs.readFileSync),避免阻塞事件循环。例如:const fs = require('fs').promises;
async function readFile() {
const data = await fs.readFile('large-file.txt', 'utf8');
console.log(data);
}
const fs = require('fs');
const readStream = fs.createReadStream('large-file.txt');
readStream.on('data', (chunk) => { /* 分块处理数据 */ });
mysql2的pool模块)复用数据库连接,避免频繁建立/断开连接。node-cache(内存缓存)或Redis(分布式缓存)减少不必要的计算:const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: 60 }); // 缓存60秒
function getData(key) {
let data = cache.get(key);
if (!data) {
data = computeExpensiveOperation(key);
cache.set(key, data);
}
return data;
}
emitter.removeListener),避免全局变量滥用(如global.xxx),使用heapdump或memwatch-next工具检测内存泄漏。cluster模块创建多个工作进程,提升并发处理能力:const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
for (let i = 0; i < os.cpus().length; i++) cluster.fork();
} else {
require('./app.js'); // 工作进程启动应用
}
pm2 start app.js --max-memory-restart 4096M -i max # 根据CPU核心数自动扩展进程
server {
listen 80;
server_name example.com;
location /static/ {
alias /var/www/static/; # 静态文件目录
expires 30d; # 缓存30天
}
location / {
proxy_pass http://node_cluster; # 转发到Node.js集群
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}
}
其中node_cluster是Nginx上游服务器组,需提前配置。--inspect参数启动应用,通过Chrome DevTools分析CPU使用率、内存泄漏及事件循环延迟:node --inspect app.js
浏览器访问chrome://inspect即可连接调试。通过以上策略的组合应用,可显著提升CentOS上Node.js应用的运行速度、稳定性和并发处理能力。需根据实际业务场景(如高并发、大数据处理)调整优化重点,持续监控性能变化。