一 系统层优化
- 文件描述符与进程限制
- 提高进程可打开文件数,避免“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 按日切割
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1474828.html