Linux 环境下 Node.js 性能监控实操指南
一 监控分层与核心指标
- 建议从四个层面建立监控:
- 系统层:关注 CPU、内存、磁盘 I/O、网络 等基础资源,识别资源瓶颈与异常波动。
- 进程层:聚焦 Node.js 进程 的 RSS、堆内存、事件循环延迟、活跃句柄/请求 等,判断是否存在阻塞或泄漏。
- 应用层:围绕 HTTP 延迟/吞吐/QPS、错误率、数据库慢查询、外部依赖时延 等业务黄金指标。
- 日志与追踪:结构化日志与 分布式追踪 结合,定位慢请求与异常链路。
二 快速上手工具与命令
- 进程与日志管理
- 使用 PM2:进程守护、一键监控与日志聚合。常用命令:
- 启动与监控:pm2 start app.js --name myapp
- 实时资源监控:pm2 monit
- 日志查看:pm2 logs myapp
- 使用 systemd:将应用托管为系统服务,便于生产级稳定运行与日志采集:
- 服务状态:systemctl status myapp
- 日志查看:journalctl -u myapp -f
- 系统级资源监控
- 交互式与轻量工具:top/htop(进程资源)、vmstat(虚拟内存/CPU/I/O)、iostat(磁盘 I/O)、free(内存)、df(磁盘空间)、nmon/atop(综合监控)。
- 网络与进程流量:nethogs(按进程查看带宽)、iftop(网卡实时流量)、netstat(连接状态)。
- 历史与系统统计:sar(配合 sysstat 收集/回放系统指标)。
三 应用层与诊断工具
- 内置与开发期分析
- 运行时指标:process.memoryUsage()、process.cpuUsage() 获取内存与 CPU 使用情况;console.time/console.timeEnd 做关键路径计时。
- 调试与剖析:
- node --inspect / --inspect-brk 连接 Chrome DevTools 的 Performance/Memory 面板进行 CPU 采样与堆快照分析。
- node --prof 生成 V8 日志,使用 node --prof-process 生成可读报告,定位热点函数。
- 生产可用 APM 与可视化
- 第三方 APM:New Relic、Datadog、Dynatrace 提供 事务追踪、错误分析、数据库/外部调用 指标与告警。
- 自建可视化:Prometheus + Grafana 采集应用与系统指标,构建统一看板与阈值告警。
- 轻量/框架集成:Easy-Monitor(进程/内存/GC 等)、express-status-monitor(Express /status 端点)、NetData(实时 Web 仪表板)。
四 关键场景与命令示例
- CPU 热点定位
- 采样剖析:启动 node --prof app.js,复现问题后执行 node --prof-process isolate-*.log > profile.txt 查看热点函数与调用栈。
- 交互分析:使用 node --inspect + Chrome DevTools Performance 录制并分析长任务与脚本耗时。
- 内存泄漏排查
- 堆快照:在代码中定时或触发条件满足时生成堆快照(如使用 heapdump),在 DevTools Memory 面板对比快照定位泄漏对象与引用链。
- 事件循环延迟
- 在关键路径前后记录 High Resolution Time(如 performance.now()),计算差值;结合 async_hooks 观察异步上下文生命周期,辅助定位延迟来源。
- 网络与数据库
- 网络:用 netstat 检查连接状态与端口占用;用 tcpdump/Wireshark 抓包分析慢请求/异常握手;在 DevTools Network 面板查看 TTFB/响应大小。
- 数据库:开启 慢查询日志,用 EXPLAIN 分析执行计划,优化 索引/SQL 与连接池配置。
五 落地方案与告警实践
- 采集与存储
- 系统层:以 node_exporter 暴露 Node.js 进程指标(如 process_resident_memory_bytes、process_cpu_seconds_total),由 Prometheus 抓取并存储。
- 应用层:在代码中暴露 /metrics 端点(如 prom-client),输出 HTTP 请求耗时直方图、事件循环延迟、Active Handles 等;APM 侧使用 New Relic/Datadog 的 Agent 自动采集。
- 可视化与告警
- Grafana 构建看板:系统资源、进程指标、业务黄金指标(如 P95/P99 延迟、吞吐、错误率)分层展示。
- 设置告警规则:如 P95 延迟 > 阈值、内存 RSS 持续增长、进程重启次数异常、5xx 错误率升高 等,通过 Alertmanager/APM 平台 推送至 钉钉/企业微信/邮件。
- 运行与维护
- 以 PM2 或 systemd 托管进程,开启 自动重启 与 日志轮转;定期回归 负载测试(如 k6/wrk/artillery)验证优化成效与容量边界。