系统级基础配置优化
ulimit -n 65535临时设置,或编辑/etc/security/limits.conf永久生效(添加* soft nofile 65535; * hard nofile 65535),避免因描述符不足导致请求被拒绝。/etc/sysctl.conf提升网络吞吐量,关键参数包括net.core.somaxconn = 65535(监听队列长度)、net.ipv4.tcp_max_syn_backlog = 65535(SYN队列长度)、net.ipv4.ip_local_port_range = 1024 65535(可用端口范围)。执行sysctl -p使配置生效。Node.js版本与应用代码优化
fs.readFileSync、child_process.spawnSync),使用回调函数、Promises或async/await处理I/O操作(如数据库查询、文件读写、网络请求),确保事件循环不被阻塞。heapdump(生成堆快照)、memwatch-next(监控内存变化)工具检测内存泄漏;避免全局变量(如未声明的变量赋值)、未释放的定时器(setInterval未调用clearInterval)、循环引用(对象相互引用)等问题。Map替代Object进行频繁查找);减少不必要的计算(如循环内重复计算);对大文件使用流(fs.createReadStream)处理,避免一次性加载到内存。进程与集群管理优化
cluster模块创建多个工作进程(数量等于CPU核心数),充分利用多核CPU资源。主进程负责fork工作进程,工作进程共享同一端口,处理并发请求。示例代码: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) => console.log(`Worker ${worker.process.pid} died`));
} else {
require('./app'); // 启动应用
}
```。
PM2(进程管理器)实现进程守护、自动重启、负载均衡(pm2 start app.js -i max)和内存监控(--max-memory-restart 4096M,超过4GB则重启)。PM2还支持集群模式,简化集群部署流程。缓存与数据库优化
Redis或Memcached缓存频繁访问的数据(如会话信息、热点数据、数据库查询结果),减少数据库访问次数。例如,用Redis缓存用户信息,设置过期时间(EXPIRE key 3600,1小时后自动删除)。CREATE INDEX idx_user_email ON users(email)),提升查询速度;使用连接池(如mysql.createPool)复用数据库连接,减少连接建立和销毁的开销;优化查询语句(如避免SELECT *,只查询所需字段)。负载均衡与反向代理配置
Nginx或HAProxy作为反向代理,将请求分发到多个Node.js实例,实现负载均衡。例如,Nginx配置:upstream myapp {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
location / {
proxy_pass http://myapp;
}
}
此配置将请求分发到3个Node.js实例,提升并发处理能力。compression)启用Gzip压缩,减小传输数据大小(如HTML、CSS、JS文件压缩率可达70%以上),提高传输速度。监控与调优
PM2内置监控(pm2 monit)或第三方工具(如New Relic、Datadog)监控应用性能,包括CPU使用率、内存占用、请求响应时间、错误率等,及时发现性能瓶颈。info、warn、error),避免过多日志输出影响性能;使用winston或pino等日志库实现日志分级、轮转(如按天分割日志文件)和远程存储(如发送到ELK平台),便于排查问题。