温馨提示×

如何在Ubuntu上监控Node.js运行状态

小樊
50
2025-10-06 04:00:45
栏目: 编程语言

如何在Ubuntu上监控Node.js运行状态

在Ubuntu系统上,监控Node.js应用的运行状态需结合进程管理、性能指标、日志分析及系统资源等多维度工具。以下是常用且有效的方法,覆盖从开发到生产环境的不同需求:

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

PM2是Node.js生态中最流行的进程管理工具,具备进程守护、实时监控、日志管理、自动重启等功能,是生产环境的推荐选择。

  • 安装PM2:通过npm全局安装,命令为sudo npm install pm2 -g
  • 启动应用:使用pm2 start app.js --name "my-app"(将app.js替换为你的入口文件,my-app为自定义应用名称)。
  • 查看状态:通过pm2 status查看所有进程的运行状态(包括CPU、内存占用、重启次数等)。
  • 实时监控pm2 monit提供交互式界面,实时显示应用的CPU、内存使用趋势及日志输出。
  • 日志管理pm2 logs实时查看应用日志,pm2 logs --lines 100查看最近100行日志(支持按进程名称过滤)。

2. 利用Systemd实现服务化监控

若需将Node.js应用作为系统服务管理(开机自启、状态检查),可通过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  # 崩溃时自动重启
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动与启用服务:运行sudo systemctl daemon-reload重新加载配置,sudo systemctl start my-app启动服务,sudo systemctl enable my-app设置开机自启。
  • 查看状态sudo systemctl status my-app可查看服务的运行状态、日志及错误信息。

3. 使用htop/top查看系统级资源占用

htop(交互式)和top(命令行)是Ubuntu自带的系统监控工具,可快速查看CPU、内存、进程等系统级资源使用情况,帮助定位Node.js进程的资源瓶颈。

  • 安装htopsudo apt install htop(若未安装)。
  • 启动htop:运行htop,通过F6键选择排序方式(如按CPU或内存排序),找到Node.js进程(通常名称为node),查看其实时资源占用。

4. 通过Node.js内置模块获取进程信息

Node.js提供processos等内置模块,可直接在应用代码中获取内存使用、CPU时间、系统信息等,适合简单的自定义监控。

  • 示例代码
    const process = require('process');
    const os = require('os');
    
    setInterval(() => {
      // 内存使用情况(单位:字节)
      const memoryUsage = process.memoryUsage();
      console.log(`Memory Usage: RSS=${(memoryUsage.rss / 1024 / 1024).toFixed(2)}MB, Heap=${(memoryUsage.heapUsed / 1024 / 1024).toFixed(2)}MB`);
    
      // CPU使用时间(单位:微秒)
      const cpuUsage = process.cpuUsage();
      console.log(`CPU Usage: User=${cpuUsage.user}μs, System=${cpuUsage.system}μs`);
    
      // 系统信息
      console.log(`System Uptime: ${os.uptime()} seconds`);
      console.log('-----------------------------');
    }, 5000); // 每5秒打印一次
    
  • 作用:通过日志输出,可跟踪应用的内存泄漏、CPU占用异常等问题。

5. 第三方专业监控工具(生产环境推荐)

对于需要详细性能分析、可视化、告警的生产环境,可使用以下工具:

  • Prometheus + Grafana
    • Prometheus是开源时间序列数据库,用于收集和存储指标;Grafana用于可视化数据(如请求率、延迟、内存使用)。
    • 步骤:在Node.js应用中安装prom-client库,定义指标(如HTTP请求耗时、内存使用),并通过/metrics端点暴露指标;Prometheus定时拉取指标,Grafana创建仪表板展示数据。
  • New Relic/Datadog
    • 全栈APM工具,支持Node.js应用的性能监控、错误追踪、日志管理。只需安装对应SDK(如newrelic),即可自动采集性能数据并可视化,适合复杂应用的全链路监控。

6. 开发环境使用nodemon监控文件变化

nodemon用于开发环境,可监控文件变动并自动重启Node.js应用,避免手动重启的麻烦,间接帮助监控应用状态。

  • 安装与使用sudo npm install nodemon -g,然后通过nodemon app.js启动应用。当app.js或其依赖文件修改时,nodemon会自动重启应用并输出日志。

以上方法可根据需求组合使用:生产环境推荐PM2+Systemd+Prometheus/Grafana,开发环境使用nodemon+htop,简单监控可使用内置模块。通过多维度监控,可全面保障Node.js应用在Ubuntu上的稳定运行。

0