Node.js 在 Linux 系统中如何调优
导读:Node.js 在 Linux 的调优清单 一 系统层优化 文件描述符与进程限制 提高进程可打开文件数,避免“Too many open files”: 临时:ulimit -n 65535 永久:在 /etc/security/li...
Node.js 在 Linux 的调优清单
一 系统层优化
- 文件描述符与进程限制
- 提高进程可打开文件数,避免“Too many open files”:
- 临时:ulimit -n 65535
- 永久:在 /etc/security/limits.conf 增加
-
- soft nofile 65535
-
- hard nofile 65535
-
- 提高进程可打开文件数,避免“Too many open files”:
- 网络与端口
- 提升连接队列与可用端口范围,缓解高并发握手与 TIME_WAIT 压力:
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 65535
- net.ipv4.ip_local_port_range = 1024 65535
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- 使配置生效:sysctl -p
- 提升连接队列与可用端口范围,缓解高并发握手与 TIME_WAIT 压力:
- 存储与基础
- 优先使用 SSD,并合理设置文件系统挂载选项(如 noatime)以减少元数据开销。
二 运行时与多进程
- 保持 Node.js 版本为最新稳定版,持续获得性能修复与优化。
- 充分利用多核 CPU
- 使用 cluster 模块或 PM2 启动与 CPU 核数一致 的工作进程:pm2 start app.js -i max
- 内存与 GC 调优
- 通过 V8 参数控制堆上限,避免 OOM 与频繁 GC:node --max-old-space-size=4096 app.js(单位 MB)
- 在内存敏感场景可考虑更保守策略:–optimize_for_size(以空间换时间)
- 并发编程要点
- 坚持异步 I/O 与事件驱动,避免阻塞事件循环
- 对CPU 密集任务使用 worker_threads 或 child_process 分流
三 反向代理与传输层
- 启用 Gzip 压缩(Nginx 示例)
- gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- 启用 HTTP/2(Nginx 示例)
- listen 443 ssl http2;
- 使用 Nginx/HAProxy 作为反向代理与负载均衡,统一处理静态资源、压缩、TLS 终止与连接复用。
四 监控 诊断与持续优化
- 运行时观测
- 内置与代码级:process.memoryUsage()、v8.getHeapStatistics()、Performance Hooks
- 调试与剖析:node --inspect / --inspect-brk 结合 Chrome DevTools;CPU 采样:node --prof
- 内存泄漏排查
- 生成堆快照(Chrome DevTools Memory 面板)、heapdump、node-memwatch 等定位增长来源
- 进程与日志
- 使用 PM2 进行进程守护、监控与日志管理;日志采用异步写入与 logrotate 按日/大小切割,避免同步日志阻塞
- 全链路监控
- APM:New Relic / Datadog
- 指标与可视化:Prometheus + Grafana
- 数据库与缓存
- 为高频查询建立索引、使用连接池、分页与合理 JOIN
- 引入 Redis/Memcached 做热点数据缓存,降低后端压力
五 一键可用的最小实践示例
- 系统调优(/etc/sysctl.conf)
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 65535
- net.ipv4.ip_local_port_range = 1024 65535
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- 进程与内存
- limits.conf:* soft/hard nofile 65535
- 启动:pm2 start app.js -i max --max-old-space-size 4096
- Nginx 反向代理与压缩
- gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
- listen 443 ssl http2;
- 监控与日志
- APM(New Relic/Datadog)或 Prometheus + Grafana
- 日志异步写入 + logrotate 按日切割
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Node.js 在 Linux 系统中如何调优
本文地址: https://pptw.com/jishu/775515.html
