Debian上Node.js项目性能调优指南
fs.promises.readFile()、db.query().then()),避免fs.readFileSync()、db.querySync()等同步方法阻塞事件循环;控制异步并发量(如用p-limit库限制并发请求数),防止资源耗尽。global.xxx),及时移除无用的事件监听器(如emitter.removeListener()),防止内存泄漏;选择高效数据结构(如用Set代替数组进行快速查找,用Map代替对象存储键值对);缓存高频计算结果(如用node-cache库缓存数据库查询结果),减少重复计算。memoizee库),避免重复计算。fs.createReadStream()逐块读取大文件,而非一次性读取整个文件;处理网络响应或数据库查询结果时,用流式传输(如res.write()分块发送数据),降低内存占用。sudo apt update && sudo apt upgrade -y确保Debian系统为最新版本;调整内核参数优化网络性能,编辑/etc/sysctl.conf添加:net.core.somaxconn = 65535 # 增加SYN队列长度
net.ipv4.tcp_max_syn_backlog = 65535 # 增加TCP SYN队列大小
net.ipv4.ip_local_port_range = 1024 65535 # 扩大本地端口范围
运行sudo sysctl -p使配置生效;增加文件描述符限制(处理高并发连接),编辑/etc/security/limits.conf添加:* soft nofile 65535 # 软限制
* hard nofile 65535 # 硬限制
临时生效可运行ulimit -n 65535。nvm install 20.12.2、nvm use 20.12.2),获取性能改进和新特性;避免使用过时版本(如Node.js 14及以下),减少已知性能问题。cluster模块或PM2集群模式,在多核CPU上创建多个工作进程(如numCPUs = require('os').cpus().length),提升并发处理能力。示例代码:const cluster = require('cluster');
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) cluster.fork(); // 主进程fork工作进程
cluster.on('exit', (worker) => cluster.fork()); // 工作进程退出时重启
} else {
require('./app.js'); // 工作进程启动应用
}
或使用PM2命令:pm2 start app.js -i max(max表示自动匹配CPU核心数)。sudo apt install nginx),配置反向代理处理静态文件(如location /static { alias /var/www/static; }),减轻Node.js服务器负担;启用负载均衡(如upstream node_servers { server 127.0.0.1:3000; server 127.0.0.1:3001; }),分配请求到多个Node.js实例,提高整体吞吐量。--inspect标志启动调试(如node --inspect app.js),通过Chrome DevTools的Performance面板分析CPU热点、内存占用;使用process.memoryUsage()(查看堆内存使用)、process.cpuUsage()(查看CPU时间)获取实时资源指标,输出到日志或监控系统。pm2 monit命令查看实时CPU、内存、请求延迟;使用New Relic、Datadog等APM工具,监控应用性能(如响应时间、错误率)、数据库查询(如慢查询)、外部API调用,生成可视化报告,快速定位瓶颈。top、htop(实时查看进程CPU、内存占用)、vmstat(查看系统内存、IO、CPU使用情况)、iostat(查看磁盘IO性能)、netstat/iftop(查看网络连接与流量),监控系统资源瓶颈(如CPU过高、内存不足、磁盘IO瓶颈)。redis.get(key)、redis.set(key, value)),减少数据库查询次数;设置合理的缓存过期时间(如redis.expire(key, 3600)),避免脏数据。CREATE INDEX idx_name ON users(name)),加速查询;使用连接池(如pg-pool for PostgreSQL、mysql2/promise for MySQL)复用数据库连接,减少连接建立开销;优化SQL查询(如避免SELECT *、使用JOIN代替子查询),减少查询时间。NODE_ENV=production(如export NODE_ENV=production),启用Node.js内置的性能优化(如V8引擎的代码压缩、缓存);使用国内npm镜像源(如npm config set registry https://registry.npmmirror.com)加快依赖下载速度;定期更新依赖(如npm update),修复已知性能bug。