系统级配置优化
/etc/sysctl.conf文件,添加或修改以下参数以优化网络性能和文件描述符限制:net.core.somaxconn = 4096(增加TCP连接队列长度)、net.ipv4.tcp_max_syn_backlog = 4096(提升SYN请求队列容量)、net.ipv4.ip_local_port_range = 1024 65535(扩大本地端口范围)、net.ipv4.tcp_tw_reuse = 1(启用TCP连接复用)。运行sudo sysctl -p使配置生效。ulimit -n 65535临时提升当前会话的文件描述符限制,永久生效需编辑/etc/security/limits.conf文件,添加* soft nofile 65535和* hard nofile 65535(允许所有用户打开最多65535个文件)。Node.js应用自身优化
nvm(Node Version Manager)安装最新版本(如nvm install --lts),新版本通常包含性能改进、内存管理优化及bug修复。fs.promises.readFile()替代fs.readFileSync()、async/await替代回调函数,避免阻塞事件循环。emitter.removeListener())、使用高效数据结构(如Set替代数组进行快速查找)。fs.createReadStream()和fs.createWriteStream()分块处理大文件,或用stream.pipeline()管理流管道,减少内存占用。cluster模块创建与CPU核心数匹配的工作进程(numCPUs = require('os').cpus().length),主进程管理子进程生命周期,充分利用多核CPU资源。示例如下:const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello from worker ' + process.pid + '\n');
}).listen(8000);
console.log(`Worker ${process.pid} started`);
}
```。
进程与资源管理
npm install pm2 -g安装,用pm2 start app.js -i max启动应用(-i max表示根据CPU核心数自动创建进程),pm2 monit监控资源使用(CPU、内存),pm2 logs查看实时日志,pm2 save保存进程列表,pm2 startup设置开机自启。PM2还能自动重启崩溃的进程,提升应用稳定性。NODE_OPTIONS环境变量设置V8堆内存大小,避免因内存不足导致进程崩溃。例如,设置旧生代最大内存为4GB:export NODE_OPTIONS="--max-old-space-size=4096",或添加到~/.bashrc/~/.zshrc中永久生效。缓存与外部服务优化
node-redis库实现缓存:const redis = require('redis');
const client = redis.createClient();
client.on('error', (err) => console.log('Redis Error:', err));
function getCachedData(key, callback) {
client.get(key, (err, data) => {
if (err) return callback(err);
if (data) return callback(null, JSON.parse(data));
// 缓存未命中时从数据库获取
fetchDataFromDB(key, (err, result) => {
if (err) return callback(err);
client.setex(key, 3600, JSON.stringify(result)); // 缓存1小时
callback(null, result);
});
});
}
```。
CREATE INDEX idx_user_email ON users(email))、使用批量操作(如INSERT INTO table VALUES (?, ?), (?, ?))替代单条插入、采用连接池(如mysql2/promise的createPool)复用数据库连接,减少连接建立和销毁的开销。监控与调优
--inspect标志启动应用(node --inspect app.js),通过Chrome DevTools的“Memory”和“Performance”面板分析内存使用情况和CPU占用,识别性能瓶颈。