温馨提示×

如何在Ubuntu上监控js应用的性能

小樊
35
2026-01-02 12:59:39
栏目: 编程语言

Ubuntu上监控JS应用的性能

一 监控体系总览

  • 运行与资源层:用PM2systemd托管进程,配合htopNetData观察CPU、内存、I/O与事件循环负载,先确保进程稳定与资源可用。
  • 应用指标层:在Node.js中引入prom-client暴露HTTP延迟、吞吐、错误率、事件循环延迟、堆内存等核心指标,便于长期趋势与告警。
  • 日志分析层:使用Winston/Bunyan/Log4js输出结构化日志,结合grep/awk/sedELK/Graylog做瓶颈定位与可视化。
  • 深度剖析层:开发/预发用Chrome DevTools定位CPU热点与内存泄漏;生产可用Clinic.js生成火焰图、事件循环延迟图与堆分析,聚焦CPU占用过高、内存泄漏、事件循环延迟等典型问题。

二 快速上手步骤

  • 进程与资源监控
    • 安装并启动应用:sudo npm i -g pm2;pm2 start app.js --name “my-app”;pm2 monit 查看资源与日志;pm2 status/logs 快速巡检。
    • 系统级观测:sudo apt install -y htop;sudo bash <(curl -Ss https://my-netdata.io/kickstart.sh) 启动后在浏览器访问 http://服务器IP:19999 查看实时指标。
  • 日志结构化与轮转
    • 使用Winston/Bunyan/Log4js输出JSON日志,便于检索与聚合;按天切分并设置保留策略,避免单文件过大影响分析效率。
  • 应用指标与可视化
    • 安装依赖:npm i prom-client;在Express中注册默认指标并暴露/metrics端点,记录HTTP请求耗时与状态码;用Prometheus抓取指标,Grafana展示与告警(可导入官方Node.js仪表盘模板,如ID:1860)。

三 深度性能剖析

  • Chrome DevTools(开发/预发)
    • 启动:node --inspect app.js;在浏览器打开 chrome://inspect 连接并录制性能面板,定位长任务、脚本执行与渲染瓶颈;内存面板可拍摄堆快照对比查找泄漏对象与引用链。
  • Clinic.js(贴近生产的诊断)
    • 全局安装:sudo npm i -g clinic;常用子工具:clinic flamegraph(CPU火焰图)、clinic bubbleprof(事件循环延迟)、clinic heapprofiler(堆分析)。适合定位CPU占用过高、事件循环延迟、内存泄漏等问题并生成离线报告。

四 关键指标与告警建议

  • 建议重点观测与告警
    • HTTP:请求耗时P95/P99、吞吐(RPS)、5xx错误率、路由级延迟分布。
    • 运行时:堆内存使用量与增长趋势、事件循环延迟、GC相关停顿、进程常驻内存RSS。
    • 系统:CPU利用率、负载均值、内存与磁盘I/O、网络带宽与丢包。
    • 日志:ERROR/超时比例、慢请求占比、关键业务失败率。
  • 实施要点
    • 指标命名统一、加标签(如route、method、status_code),便于聚合与下钻。
    • 为P95/P99延迟、错误率、内存阈值设置分级告警,避免告警疲劳。

五 排障与优化流程

  • 发现异常:先看PM2/NetData/htop定位是系统资源瓶颈还是应用自身问题;再查Grafana/Prometheus指标曲线是否异常突增或持续恶化。
  • 缩小范围:用结构化日志与grep/awk/sedELK/Graylog筛选慢请求与错误聚集;必要时在关键路径增加计时与上下文信息。
  • 定位根因:开发环境用Chrome DevTools录制并分析热点函数与内存快照;预发/灰度用Clinic.js生成火焰图、事件循环延迟图与堆分析,聚焦CPU、内存、事件循环三大类问题。
  • 回归验证:修复后对比修复前后P95/P99、吞吐、错误率与内存曲线,观察至少一个业务高峰周期,确认问题消除且未引入新瓶颈。

0