Linux Node.js应用如何进行性能监控
导读:Linux 下 Node.js 性能监控实操指南 一 监控体系与分层 建议采用分层监控:系统层、进程层、应用层、日志与链路层、可视化告警层,形成闭环。 常用工具与用途一览: 系统层:top/htop、vmstat、iostat、free...
Linux 下 Node.js 性能监控实操指南
一 监控体系与分层
- 建议采用分层监控:系统层、进程层、应用层、日志与链路层、可视化告警层,形成闭环。
- 常用工具与用途一览:
- 系统层:top/htop、vmstat、iostat、free、df、sar、nmon、atop、perf、strace、tcpdump/Wireshark、Nethogs/iftop(CPU、内存、磁盘 I/O、网络、系统调用与抓包)
- 进程层:PM2(进程管理、资源监控、日志聚合、自动重启)
- 应用层:Node.js 内置 perf_hooks/process、v8-profiler、heapdump、node --inspect/–prof、Chrome DevTools
- 日志与链路层:winston/morgan、ELK Stack/Graylog/Splunk
- 可视化与告警层:Prometheus + Grafana、New Relic、Datadog、Uptime Kuma
- 服务编排与可靠性:systemd(常驻进程、自动拉起、日志收集)
二 快速上手步骤
- 进程与日志
- 使用 PM2 启动与守护:安装
npm i -g pm2;启动pm2 start app.js --name my-api;查看状态pm2 status;实时资源监控pm2 monit;实时日志pm2 logs my-api;设置自动重启与内存阈值:pm2 set pm2restartdelay 1000、pm2 set pm2maxrestarts 5、pm2 set pm2memoryrestart 100M。
- 使用 PM2 启动与守护:安装
- 系统资源
- 快速巡检:
top/htop(进程资源)、vmstat 1(系统整体)、iostat -x 1(磁盘)、free -m(内存)、df -h(磁盘空间)、sar -u 1 3(CPU 历史/实时)、nmon/atop(综合监控)。
- 快速巡检:
- 运行与故障排查
- 以服务运行并集中日志:
systemd服务 +journalctl -u my-app查看 stdout/stderr 与重启原因。 - 远程调试与剖析:启动
node --inspect或node --inspect-brk连接 Chrome DevTools Performance 面板录制;CPU 热点用node --prof生成日志并用node --prof-process分析;内存泄漏用 heapdump 生成快照并用 DevTools Memory 面板分析。
- 以服务运行并集中日志:
三 关键指标与采集方法
- 建议重点观测的指标、采集方式与典型工具如下:
| 维度 | 关键指标 | 采集方式/工具 | 说明 |
|---|---|---|---|
| CPU | 进程 CPU%、系统负载 | top/htop、vmstat、sar -u | 识别计算密集与多核利用情况 |
| 内存 | RSS、堆使用、堆上限、GC 行为 | PM2 monit、process.memoryUsage()、–prof/DevTools | 关注堆增长与频繁 GC |
| 事件循环 | 延迟、阻塞时长 | 应用埋点或 APM | 定位长任务/回调堆积 |
| 请求性能 | P50/P95/P99、吞吐、错误率 | prom-client + Prometheus/Grafana、New Relic/Datadog | 以路由/状态码维度聚合 |
| 文件系统 | 磁盘使用率、IOPS、吞吐 | df、iostat | 日志/上传导致的 I/O 压力 |
| 网络 | 带宽、连接数、重传 | nload/iftop、Nethogs、tcpdump/Wireshark | 发现连接风暴与慢客户端 |
| 依赖服务 | DB 查询耗时、慢查询 | DB 慢查询日志、EXPLAIN | SQL 与索引优化依据 |
- 示例:用 prom-client 暴露 HTTP 请求时延直方图
- 代码片段:
- const promClient = require(‘prom-client’);
- const httpRequestDurationMicroseconds = new promClient.Histogram({ name: ‘http_request_duration_ms’, help: ‘Duration of HTTP requests in ms’, labelNames: [‘method’, ‘route’, ‘code’], buckets: [0.1, 5, 15, 50, 100, 200, 300, 400, 500] } );
- app.use((req, res, next) => { const start = Date.now(); res.on(‘finish’, () => { const duration = Date.now() - start; httpRequestDurationMicroseconds .labels(req.method, req.route?.path || req.path, res.statusCode) .observe(duration); } ); next(); } );
- 在 Prometheus 中配置抓取目标,在 Grafana 中绘制 P50/P95/P99 曲线并设置告警。
- 代码片段:
四 可视化与告警落地
- 自建可观测性栈:Prometheus 抓取 Node.js(prom-client)与系统指标,Grafana 做可视化仪表盘与阈值告警;适合对数据主权与成本可控的团队。
- 商业 APM:New Relic / Datadog 提供分布式追踪、错误跟踪、数据库与外部调用分析,开箱即用,适合快速提升可观测性覆盖。
- 可用性监控:Uptime Kuma 轻量自托管,支持 HTTP/HTTPS/TCP/Ping 等探针与 Telegram/Discord/Slack 通知,适合站点与接口存活监测。
- 日志中枢:使用 winston/morgan 输出结构化日志,接入 ELK/Graylog/Splunk 做检索、聚合与告警。
五 排障流程与优化建议
- 症状到工具映射
- CPU 飙高:top/htop → 定位热点进程/线程;
perf top -p < PID>找热点函数;strace -p < PID> -c看系统调用占比;Node 侧用--prof+ DevTools/火焰图确认 JS 执行热点。 - 内存泄漏:PM2 monit/process.memoryUsage() 观察堆增长;生成 heapdump 快照,DevTools Memory 面板对比快照定位泄漏对象与引用链。
- 请求变慢/超时:应用埋点或 APM 看 P95/P99 与错误率;DB 侧开启慢查询日志并用 EXPLAIN 优化索引与语句;必要时抓包
tcpdump分析握手/重传与长尾延迟。 - 磁盘/网络瓶颈:iostat 查 IOPS 与 await;df 看容量;iftop/Nethogs 定位进程带宽占用;结合业务日志与 DB 慢查询判断写入放大或外部依赖拥塞。
- CPU 飙高:top/htop → 定位热点进程/线程;
- 优化要点
- 避免阻塞事件循环(大计算拆分、使用 Worker Threads/子进程)
- 合理使用缓存(内存/Redis),减少重复计算与 I/O
- 优化 SQL 与索引、批量写入、连接池与超时设置
- 控制并发与背压,设置合理的请求超时与重试策略
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Node.js应用如何进行性能监控
本文地址: https://pptw.com/jishu/759781.html
