温馨提示×

Linux系统Node.js如何进行性能监控

小樊
35
2025-12-10 12:26:53
栏目: 编程语言

Linux 下 Node.js 性能监控实操指南

一 监控分层与关键指标

  • 建议从四个层面建立监控:
    • 应用进程:使用 PM2systemd 观察 CPU%、内存 RSS/堆、重启次数、运行时间 等。
    • 系统资源:用 top/htop、vmstat、iostat、free、df、nmon/atop 观察 CPU 负载、内存与 Swap、磁盘 I/O、文件系统空间
    • 网络链路:用 Nethogs、iftop 定位 进程级带宽占用网卡实时流量
    • 应用内与 APM:暴露 /health 健康检查,结合 Prometheus + GrafanaNew Relic/Datadog 获取 HTTP 延迟、吞吐、错误率、依赖调用链 等。

二 快速上手组合 PM2 + systemd + 日志

  • PM2 快速监控
    • 安装与启动:npm install -g pm2pm2 start app.js --name my-api
    • 常用命令:pm2 list(查看状态)、pm2 monit(资源监控)、pm2 logs my-api(实时日志)、pm2 status(简要状态)
  • systemd 托管与可靠性
    • 创建服务文件 /etc/systemd/system/my-app.service(示例)
      [Unit]
      Description=Node.js Application
      After=network.target
      
      [Service]
      Type=simple
      User=node
      WorkingDirectory=/opt/myapp
      ExecStart=/usr/bin/node /opt/myapp/app.js
      Environment=NODE_ENV=production
      Restart=always
      RestartSec=5
      
      [Install]
      WantedBy=multi-user.target
      
    • 常用命令:systemctl daemon-reloadsystemctl start my-appsystemctl status my-appjournalctl -u my-app -f
  • 健康检查端点
    • 在应用内添加 /health:返回 200 OK 与简要状态,便于 PM2/负载均衡/探针 探测。

三 系统级监控与网络诊断

  • 资源总览与瓶颈定位
    • htop(交互式进程与资源)、nmon/atop(CPU/内存/磁盘/网络全景)、vmstat 1(系统整体活动)、iostat -x 1(磁盘 I/O)、free -h(内存)、df -h(磁盘空间)
  • 网络与依赖排查
    • Nethogs(按进程查看带宽)、iftop(网卡实时流量)、必要时配合 tcpdump/Wireshark 抓包分析。

四 深入性能分析与 APM

  • 应用内与开发期分析
    • node --inspect / --inspect-brk 连接 Chrome DevTools Performance 面板录制 CPU/内存/事件循环node --profnode --prof-processV8 CPU 采样 与火焰图分析;必要时用 perf/strace 做系统级热点与系统调用追踪。
  • 生产级 APM 与可视化
    • New Relic、Datadog 提供 事务追踪、错误监控、依赖地图;自建指标可用 prom-client 暴露 /metrics,由 Prometheus 抓取并在 Grafana 可视化。

五 落地检查清单与告警建议

  • 进程与重启:配置 Restart=always/RestartSec=,用 pm2 monitsystemctl status 观察 OOM/异常退出;必要时设置 内存阈值重启(如 PM2 的 –max-memory-restart)。
  • 资源阈值:为 CPU 持续高占用、内存逼近物理内存、磁盘剩余空间不足、磁盘 I/O 饱和 设置 分级告警;结合 nmon/atopiostat 定位瓶颈。
  • 网络健康:用 Nethogs/iftop 发现异常连接与带宽占用;对外接口设置 HTTP 5xx/延迟/P95/P99 告警。
  • 日志与链路:统一 结构化日志(如 Winston/Morgan),接入 ELK/Graylog/Splunk;关键路径添加 trace-id,配合 APM端到端 追踪。

0