温馨提示×

Ubuntu Nodejs运行如何监控

小樊
45
2025-11-02 05:30:27
栏目: 编程语言

Ubuntu系统监控Node.js运行的常用方法

1. 使用PM2进行进程管理与监控

PM2是Node.js生态中最流行的进程管理工具,不仅能保持应用持续运行(自动重启崩溃的进程),还提供实时监控功能。

  • 安装与启动:通过npm全局安装PM2,启动应用时指定名称(便于后续管理),例如:sudo npm install pm2 -gpm2 start app.js --name "my-app"
  • 核心监控命令pm2 monit可打开实时监控面板,显示应用的CPU、内存使用率、日志输出及进程状态;pm2 status查看所有进程的详细信息(如运行状态、CPU/内存占用、重启次数);pm2 logs my-app实时查看应用日志(支持过滤关键字)。
  • 额外功能:PM2还支持集群模式(提升应用性能)、日志轮转(避免日志文件过大)及零停机重启(更新应用时不中断服务)。

2. 利用系统自带工具查看资源占用

Ubuntu自带的命令行工具可快速查看Node.js进程的系统资源使用情况,适合快速排查资源瓶颈。

  • htop:交互式进程查看器,比top更直观。安装命令:sudo apt install htop;运行后通过F3搜索“node”进程,查看其实时CPU、内存、线程使用情况。
  • top/pstop命令实时显示系统进程的资源占用(按M按内存排序,按P按CPU排序);ps aux | grep node快速查找Node.js进程的PID及资源使用情况。
  • vmstat/iostatvmstat 1每秒刷新一次系统整体资源使用情况(包括内存、CPU、IO);iostat -x 1查看磁盘IO的详细指标(如读写速率、等待时间)。

3. 通过系统日志与服务管理监控

将Node.js应用作为系统服务运行,借助systemd实现开机自启、状态监控及日志管理。

  • 创建systemd服务:编辑服务文件sudo nano /etc/systemd/system/my-app.service,内容如下(根据实际路径修改):
    [Unit]
    Description=Node.js Application Service
    After=network.target
    
    [Service]
    Type=simple
    User=your-username
    WorkingDirectory=/path/to/your/app
    ExecStart=/usr/bin/node /path/to/your/app/app.js
    Restart=always  # 应用崩溃时自动重启
    Environment=NODE_ENV=production
    
    [Install]
    WantedBy=multi-user.target
    
  • 管理与服务状态sudo systemctl daemon-reload重新加载服务配置;sudo systemctl start my-app启动服务;sudo systemctl status my-app查看服务状态(包括进程PID、运行时间、最近日志);sudo journalctl -u my-app -f实时查看应用日志。

4. 使用第三方APM工具进行深度监控

第三方APM(应用性能管理)工具提供全面的性能分析、错误跟踪及可视化功能,适合生产环境。

  • Prometheus + Grafana
    • Prometheus是开源时间序列数据库,用于收集和存储指标;Grafana是可视化工具,用于创建仪表板。
    • 集成步骤:在Node.js应用中安装prom-client库,定义指标(如HTTP请求延迟、内存使用)并暴露/metrics端点;Prometheus配置抓取目标(指向应用的/metrics端点);Grafana添加Prometheus数据源,创建仪表板展示指标。
  • New Relic/Datadog
    • New Relic:全栈APM工具,支持Node.js应用的性能监控、错误跟踪、日志分析,提供实时洞察;
    • Datadog:云原生监控平台,支持Node.js应用的实时监控、日志管理、分布式追踪,适合云环境。

5. 内置模块与日志记录

Node.js内置模块可用于获取应用级别的性能数据,结合日志库可实现自定义监控。

  • 内置模块
    • process.memoryUsage():返回应用的内存使用情况(如rss(常驻内存)、heapUsed(堆内存使用));
    • process.cpuUsage():返回应用的CPU使用时间(用户态+内核态);
    • process.hrtime():高精度计时器,用于计算代码执行时间。
  • 日志记录:使用winstonbunyan等日志库记录应用的关键事件(如请求处理、错误发生、数据库操作),例如:
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({ filename: 'error.log', level: 'error' }),
        new winston.transports.File({ filename: 'combined.log' }),
        new winston.transports.Console()
      ]
    });
    logger.info('Application started');
    logger.error('Something went wrong!', error);
    
    日志可用于后续分析应用的运行状态及故障原因。

0