温馨提示×

Node.js 在 Debian 上如何进行性能监控

小樊
36
2025-12-07 05:22:02
栏目: 编程语言

监控目标与总体架构

  • 建议从四个层面建立可观测性:
    1. 系统层:CPU、内存、磁盘 I/O、网络等资源;
    2. 进程层:Node 进程的 CPU%、RSS、Heap、Event Loop Lag 等;
    3. 应用层:HTTP 延迟、吞吐、错误率、依赖调用;
    4. 可用性层:健康检查、告警、可视化与历史回溯。
  • Debian 上,常用组合是:PM2(进程与基础指标)、Prometheus + Grafana(时序与可视化)、New Relic/Datadog(APM)、NetData/Uptime Kuma(系统/可用性)、以及 Node.js 内置工具(快速排障与开发期分析)。

快速上手 PM2 与应用内健康检查

  • 安装与启动
    • 安装:sudo npm install -g pm2
    • 启动:pm2 start app.js --name “my-app”
    • 常用:pm2 statuspm2 logs my-apppm2 monitpm2 top
    • 持久化:pm2 save && pm2 startup(开机自启与自动恢复)
  • 健康检查端点(示例)
    • 代码:
      const http = require(‘http’);
      http.createServer((req, res) => {
      if (req.url === ‘/health’) {
      res.writeHead(200, { ‘Content-Type’: ‘text/plain’ });
      res.end(‘OK’);
      } else { /* 业务路由 */ }
      }).listen(3000);
    • 验证:curl http://localhost:3000/health
  • 说明:PM2 适合快速获得 CPU/内存/日志 等运行时视图;健康检查便于 负载均衡/探针 判定存活。

系统级与 APM 监控

  • 系统级实时与历史
    • 实时:htopatopnmon
    • 历史/统计:vmstatiostatsar(需安装 sysstat)、freedf
    • 用途:定位 CPU 饱和、内存泄漏、I/O 瓶颈、磁盘空间 等系统根因。
  • APM 与可视化
    • New Relic / Datadog:一键接入 事务、错误、依赖、慢查询 等深度指标,适合生产环境持续观测。
    • Prometheus + Grafana
      • 安装 Prometheus(示例):
        wget https://github.com/prometheus/prometheus/releases/download/v2.34.0/prometheus_2.34.0.linux-amd64.deb
        sudo dpkg -i prometheus_2.34.0.linux-amd64.deb
      • 配置抓取(示例抓取 Node.js 应用指标端口 9100):
        scrape_configs:
        • job_name: ‘node’
          static_configs:
          • targets: [‘localhost:9100’]
      • 访问 http://localhost:9090 查询与告警;Grafana 添加 Prometheus 数据源并导入面板进行可视化。
    • NetDatasudo apt install netdata,访问 http://:19999 查看系统与应用实时仪表盘。
    • Uptime Kuma:自托管可用性监控,支持 HTTP(s)/TCP/Ping 等,访问 http://localhost:3001 配置监控与通知。

深度性能分析与负载测试

  • CPU/内存剖析
    • 启动调试:node --inspect server.js,在 Chrome DevToolschrome://inspect 进行采样与火焰图分析。
    • 生产可用分析:node --prof 生成 V8 日志,再用 node --prof-process 输出可读报告,定位 热点函数/内存分配
    • 内存快照:heapdump 生成堆快照,分析 泄漏与对象保留路径
  • 负载与压力测试
    • Autocannon:autocannon -c 100 -d 30 http://localhost:3000
    • wrk:wrk -t12 -c400 -d30s http://localhost:3000
    • Artillery:artillery run scripts/load-test.yml
  • 说明:剖析与压测结合,可验证 优化效果容量边界

落地配置与告警建议

  • 建议的最小闭环
    • 运行与自愈:PM2 托管 + systemd 服务(便于开机自启、日志收集与重启策略)。
    • 资源与可视化:Prometheus 抓取 Node/系统指标,Grafana 展示与告警面板。
    • 可用性:Uptime Kuma/health 做定时探测与通知。
    • 日志:集中到 journald/systemd 或文件,必要时接入 ELK/Graylog/Splunk
  • 关键告警示例
    • Node 进程 Crash/重启次数 异常
    • HTTP 5xx 错误率P95/P99 延迟 超过阈值
    • 内存 RSS/Heap 持续增长或接近容器/实例上限
    • 磁盘空间 低于阈值、CPU iowait 持续偏高
  • 安全与维护
    • 暴露给 Prometheus 的指标端口与路径需做 访问控制
    • Grafana/Prometheus 默认口令需修改,生产建议启用 TLS认证
    • 剖析与快照仅在排障窗口短时开启,避免 性能与隐私 风险。

0