使用 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 | 多色柱状图或图标列表 |
监控接口返回结果:
优化后展示:
至此完成!!!
测试有效!!!感谢支持!!!