Ubuntu环境下Node.js项目性能优化策略
ulimit -n 65535临时设置,永久生效需修改/etc/security/limits.conf(添加* soft nofile 65535、* hard nofile 65535)。/etc/sysctl.conf,添加net.core.somaxconn=4096(最大连接队列长度)、net.ipv4.tcp_max_syn_backlog=4096(SYN队列长度)、net.ipv4.tcp_tw_reuse=1(复用TIME-WAIT连接)、net.ipv4.ip_local_port_range=1024 65535(可用端口范围),运行sudo sysctl -p使配置生效。nvm(Node Version Manager)安装最新稳定版(如v22.x),避免旧版本的bug和性能缺陷。命令:curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt install nodejs。fs.readFileSync),使用fs.promises.readFile、async/await或Promise处理I/O操作,防止阻塞事件循环。p-limit库),避免过多并发请求耗尽系统资源。removeListener),使用WeakMap/WeakSet管理缓存。Map替代普通对象提升查找效率),减少内存占用。process.memoryUsage()(返回heapUsed、rss等指标)实时跟踪内存使用,及时排查泄漏。worker_threads模块)或子进程,避免阻塞主事件循环。worker_threads创建子线程处理计算任务,完成后通过postMessage返回结果。fs.createReadStream/createWriteStream替代一次性读取,减少内存占用。pipe)将文件从源读取后直接写入目标,无需中间缓存。cluster模块创建多个工作进程(数量=CPU核心数),共享同一端口,提升并发处理能力。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.js'); // 启动应用
}
pm2(进程管理器)启动应用,实现负载均衡、自动重启、日志管理、性能监控。pm2 start app.js -i max(根据CPU核心数启动最大进程数)、pm2 monit(实时监控CPU/内存)、pm2 logs(查看日志)。node --inspect app.js启动调试模式,通过Chrome DevTools的“Performance”面板记录CPU使用情况。--inspect结合Heap Snapshot(堆快照)检测内存泄漏;或使用--prof生成性能分析报告(node --prof app.js),再用node --prof-process isolate-0xnnnnnnnnnnnn-v8.log解析。top/htop(实时进程资源占用)、vmstat(内存/IO/CPU统计)、iostat(磁盘IO详情)、netstat/iftop(网络连接/流量)监控系统状态,及时发现资源瓶颈。listen 443 ssl http2;),提升多路复用、头部压缩效率,减少延迟。npm prune)、使用轻量级替代库(如fast-json-stringify替代JSON.stringify)、锁定依赖版本(package-lock.json),减少不必要的资源消耗。通过以上多维度的优化策略,可显著提升Ubuntu环境下Node.js项目的性能、稳定性和可扩展性。优化过程中需结合应用实际场景(如高并发、CPU密集型、IO密集型)调整策略,持续监控性能指标以验证效果。