当前位置: 首页 > news >正文

使用 PM2 启动node服务,并添加监控接口

1、安装 pm2 (前提:已经安装了 Node.js 和 npm)

npm install pm2 -g       # 全局安装 pm2

2、启动项目

pm2 start app.js --name my-app   # 启动项目

参数解释:

  • app.js 是你项目的入口文件

  • --name 是给这个服务起个名字(方便管理)

🧰 常用 PM2 命令合集

操作命令
查看所有运行的服务pm2 list
停止服务pm2 stop my-node-app
重启服务pm2 restart my-node-app
删除服务pm2 delete my-node-app
查看日志pm2 logs my-node-app
查看某服务状态pm2 show my-node-app

♻️ 设置开机自启(推荐服务器使用)

pm2 startup

它会输出一段命令,比如:

sudo env PATH=$PATH:/usr/bin pm2 startup windows -u your-user --hp "C:\Users\your-user"

按提示运行一次,然后:

pm2 save

这样服务就会在你每次系统重启后自动恢复。

✅ 以后常用命令(可以收藏)

操作命令
启动项目pm2 start app.js --name my-node-app
查看状态pm2 list
停止项目pm2 stop my-node-app
重启项目pm2 restart my-node-app
查看日志pm2 logs my-node-app
删除进程pm2 delete my-node-app

如果在服务器上安装成功了 pm2 但是运行还是提示“不是内部或外部命令”,那就可能是环境变量问题,配置方法如下:

✅ 步骤一:找出 PM2 安装到哪里了

在命令行中输入以下命令(复制整行):

npm bin -g

你会得到一个路径,比如这样:

C:\Users\Administrator\AppData\Roaming\npm

这个路径里就包含了 pm2.cmd,也就是你要运行的 PM2。

✅ 步骤二:把这个路径加到环境变量里

1. 打开「环境变量」设置:

  • 右键「此电脑」 → 属性

  • 点击左侧「高级系统设置」

  • 弹窗里点击「环境变量」

2. 修改系统环境变量中的 Path:

  • 在「系统变量」区域,找到 Path,点击「编辑」

  • 点击「新建」,粘贴刚才得到的路径
    示例:

C:\Users\Administrator\AppData\Roaming\npm

保存 → 一路确定退出

3. 关闭当前 CMD 窗口,重新打开一个新的 CMD,再输入:

pm2 -v

✅ 现在应该能看到 PM2 的版本号,比如:

6.0.5

以上是 pm2 的配置,下边说接口的监控:

完整代码示例:

const express = require('express');
const os = require('os');
const app = express();
const port = 3000;// 模拟检查数据库状态(你可以换成真实检查逻辑)
const checkDependencies = async () => {return {mongoDB: 'ok',   // 假设成功连通redis: 'fail',   // 假设 Redis 断连};
};app.get('/health', async (req, res) => {const startTime = Date.now();const memoryUsage = process.memoryUsage(); // 内存信息const cpuLoad = os.loadavg()[0];           // 1 分钟内平均负载const uptime = process.uptime();           // 启动后存活时间(秒)const dependencies = await checkDependencies(); // 依赖健康状态const healthData = {status: 'ok', // 默认 OK,如果有失败项你可以自动设置为 failtimestamp: new Date().toISOString(),uptime: Math.floor(uptime),memoryUsage: {rss: memoryUsage.rss,heapTotal: memoryUsage.heapTotal,heapUsed: memoryUsage.heapUsed,external: memoryUsage.external},cpuLoad: cpuLoad.toFixed(2),responseTime: Date.now() - startTime,dependencies};// 根据依赖检查结果,自动降级状态if (Object.values(dependencies).includes('fail')) {healthData.status = 'degraded';}res.json(healthData);
});app.listen(port, () => {console.log(`健康检测接口已启动:http://localhost:${port}/health`);
});

📦 三、你能拿到的数据字段:

  • memoryUsage:进程当前内存占用(单位:字节)

  • cpuLoad:CPU 1分钟平均负载(非百分比)

  • uptime:Node进程已运行的秒数

  • responseTime:这个接口本身的响应速度(单位:毫秒)

  • dependencies:你自定义的依赖检查,比如数据库连接状态

  • status:整体服务状态(ok / degraded / fail)

📊 四、前端如何展示?

这些数据可以每隔 5 秒轮询 /health 接口,然后:

数据图表建议
status饼图或状态灯
uptime数字显示
cpuLoad折线图
memoryUsage.heapUsed折线图(Y轴单位 MB)
dependencies多色柱状图或图标列表

监控接口返回结果:

优化后展示:

至此完成!!!

测试有效!!!感谢支持!!!

相关文章:

  • Linux系统之restore命令的基本使用
  • d3.js绘制组合PCA边缘分布图
  • 数据结构(6)
  • MYOJ_11700(UVA10591)Happy Number(快乐数)(超快解法:图论思想解题)
  • 阿尔特拉 EP1C12F324I7N AlteraFPGA Cyclone
  • Redis——数据结构
  • 【ELF2学习板】OpenCL程序测试
  • 逻辑删除表结构如何加唯一索引?
  • Obsidian的简单使用
  • 【Semantic Kernel核心组件】Kernel:掌控AI编排的“中央处理器“
  • Java基础知识面试题(已整理Java面试宝典pdf版)
  • AbMole—如何高效诱导巨噬细胞的极化?
  • 04-libVLC的视频播放器:获取媒体信息
  • 《手环表带保养全攻略:材质、清洁与化学品避坑指南》
  • 力扣349 == 两个数组交集的两种解法
  • 第十五届蓝桥杯青少Python省赛中级组真题 ——浇花系统
  • Java命名规则
  • 01、单片机简介
  • photo-sphere-viewer 4.8.1在vue中使用
  • Vim使用完全指南:从基础到高效编辑
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 反制美国钢铝关税!印度拟对美国部分商品征收关税
  • 普京提议重启俄乌直接谈判后,特朗普表态了
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 印度一战机在巴基斯坦旁遮普省被击落,飞行员被俘