温馨提示×

Linux 环境中 Node.js 如何调优

小樊
37
2025-11-20 20:02:39
栏目: 编程语言

Linux 环境下 Node.js 调优指南

一 基础与运行时选择

  • 使用 Node.js LTS 或最新稳定版,及时获得 性能改进与 bug 修复;通过 NVM 管理多版本,便于灰度与回滚。
  • 采用 PM2 进行进程守护、集群、日志与监控,生产环境优先选择进程管理工具而非直接 node 命令启动。
  • 充分利用 异步 I/O事件循环,避免同步阻塞;处理大文件与大数据集时使用 流(Streams) 降低内存峰值。
  • 在反向代理层启用 GzipHTTP/2,并配合 CDN 加速静态资源,减少后端压力与网络耗时。

二 并发与多核利用

  • 使用 cluster 模块 或 PM2 的集群模式,按 CPU 核心数 启动多个工作进程,充分利用多核能力。
  • 前置 Nginx/HAProxy 做反向代理与负载均衡,统一处理长连接、压缩、TLS 与静态资源。
  • 提升系统 文件描述符限制(ulimit -n),并在 /etc/security/limits.conf 中持久化,避免 “Too many open files”。
  • 控制 并发连接数 与下游依赖的 连接池 大小,防止资源耗尽与级联雪崩。

三 内存与垃圾回收

  • 监控进程内存:在代码中记录 process.memoryUsage(),配合 heapdump、Chrome DevTools 分析堆快照定位泄漏。
  • 设置 –max-old-space-size 限制老生代内存,容器场景同时设置容器内存上限,避免 OOM。
  • 优先使用 处理大文件/大响应,避免一次性加载;减少闭包与全局变量,及时释放不再使用的对象。
  • 计算密集型 任务,使用 Worker Threads子进程 分担主线程压力,降低事件循环阻塞。
  • 在明确场景下可尝试 –optimize_for_size 降低内存占用(可能牺牲部分性能)。

四 Linux 系统层面优化

  • 调整 文件描述符限制:如 ulimit -n 65536,并在 limits.conf 为运行用户设置持久化值。
  • 优化 TCP/IP 参数 与网络栈(如 rmem/wmem、somaxconn、backlog 等),提升高并发网络吞吐与稳定性。
  • 关闭不必要的服务与自启进程,减少资源争用;必要时升级 CPU/内存/SSD 硬件。
  • 容器化部署时,合理设置 内存与 CPU 限额,并开启 OOM 防护 与健康检查。

五 数据库、缓存与监控

  • 为高频查询建立 索引,避免全表扫描;使用 连接池 控制并发连接数,减少频繁建连开销。
  • 引入 Redis/Memcached 做热点数据缓存,结合 HTTP 缓存头(Cache-Control/ETag) 减少重复计算与回源。
  • 减少 外部 API 调用次数,能批量则批量,设置 超时与熔断,避免下游抖动拖垮上游。
  • 建立 监控与日志:使用 Prometheus + Grafana 监控 事件循环延迟、堆内存、GC、RPS、P95/P99 延迟 等;日志接入 ELK 或类似体系,便于排障与容量规划。

0