网站首页 > 博客文章 正文
一、Node.js 为何需要专业的进程管理工具?
作为构建高性能网络应用的首选技术栈,Node.js 凭借事件驱动的异步架构在 I/O 密集型场景中表现优异。但当我们将开发好的应用推向生产环境时,会面临一系列挑战:
- 进程稳定性:Node.js 单进程运行时,代码异常可能导致整个服务崩溃
- 资源利用:多核 CPU 性能无法充分发挥(默认单进程运行)
- 部署效率:手动重启服务、配置环境变量等操作繁琐易错
- 日志管理:缺乏统一的日志收集和监控机制
这时,PM2(Process Manager for Node.js)应运而生。这款明星级进程管理工具,不仅解决了上述痛点,还提供了从开发到生产的全周期管理能力,成为 Node.js 部署的标配方案。
二、PM2 核心功能速览
功能模块 | 核心价值 |
进程守护 | 自动重启崩溃进程,确保服务 7×24 小时运行 |
负载均衡 | 支持集群模式,充分利用多核 CPU,提升吞吐量 |
日志管理 | 统一收集应用日志,支持按日期 / 大小分割,可对接外部日志服务 |
监控报警 | 实时查看 CPU / 内存占用,支持自定义阈值报警 |
部署自动化 | 集成 Git 钩子,实现代码更新自动重启服务 |
资源隔离 | 支持多应用管理,避免进程间资源冲突 |
三、快速上手:PM2 基础操作指南
1. 安装与初始化
# 全局安装 PM2
npm install pm2 -g
# 启动应用(常规模式)
pm2 start app.js --name "my-api" # 指定进程名称
# 启动应用(集群模式,自动根据 CPU 核数fork进程)
pm2 start app.js -i max --name "my-api-cluster"
#启动npm命令,注意start前面的空格
pm2 start npm --name "my-api" -- start
#启动yarn命令
pm2 start yarn --name "my-api" -- run start
2. 常用管理命令
pm2 list # 查看所有运行进程
pm2 show [id|name] # 查看进程详细信息
pm2 stop [id|name] # 停止指定进程
pm2 restart [id|name] # 重启指定进程
pm2 reload [id|name] # 平滑重启(适用于集群模式,无中断更新)
pm2 delete [id|name] # 删除进程(从列表移除)
pm2 logs # 查看所有进程日志
pm2 monit # 实时监控进程资源占用
3. 配置文件进阶(ecosystem.config.js)
推荐使用配置文件管理复杂应用,创建 ecosystem.config.js:
module.exports = {
apps: [{
name: 'my-api',
script: 'app.js', // 主入口文件
env: {
NODE_ENV: 'development' // 开发环境变量
},
env_production: {
NODE_ENV: 'production', // 生产环境变量
PORT: 8080
},
instances: 'max', // 集群实例数,'max' 表示CPU核心数
autorestart: true, // 自动重启
watch: false, // 关闭文件监控(生产环境建议关闭)
max_memory_restart: '1G', // 内存超过1G时自动重启
log_file: './logs/app.log', // 自定义日志文件
error_file: './logs/err.log',
out_file: './logs/out.log'
}]
};
启动配置文件:
pm2 start ecosystem.config.js --env production # 指定环境
四、生产环境最佳实践
1. 集群模式深度优化
// 支持动态切换集群/单例模式的代码示例
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// 主进程管理工作进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died, restarting...`);
cluster.fork(); // 自动重启崩溃的工作进程
});
} else {
// 工作进程运行实际服务
require('./app.js');
}
通过 pm2 start app.js -i max 即可启动集群模式,PM2 会自动管理主从进程。
2. 日志管理最佳实践
pm2 logs # 实时查看合并日志
pm2 logs my-api # 查看指定应用日志
pm2 flush # 清空日志
pm2 rotate # 按规则分割日志(基于配置文件设置)
# 对接外部日志服务(如 Winston)
const winston = require('winston');
winston.add(new winston.transports.File({ filename: 'combined.log' }));
#日志自动分割
pm2 install pm2-logrotate
#pm2-logrotate工具怎么分割日志可自行百度
3. 开机自启动
pm2 save # 保存当前进程状态
pm2 startup # 生成开机启动脚本
# 根据提示执行相应命令(如 systemd/upstart 等)
#windows下自启动使用以下命令
npm install pm2-windows-startup -g
pm2-startup install
#其他的操作与linux下一致
4. 监控与报警配置
pm2 monit # 图形化监控界面
pm2 install pm2-alert # 安装报警插件
pm2 set pm2-alert:email xxx@example.com # 设置报警邮箱
pm2 alert add cpu 80 # CPU占用超过80%触发报警
猜你喜欢
- 2025-06-08 WinPE疑难解答(winpe无法进入)
- 2025-06-08 如何做好跨团队协作项目?(跨团队协作的方法)
- 2025-06-08 正规翻译公司的服务流程是怎样的?火星翻译总结了这些
- 2025-06-08 Chinese FM holds talks with New Zealand deputy PM
- 2025-06-08 Axure PR 9 移动端设计规范(axure移动端尺寸)
- 2025-06-08 App上线需要自查的List:主要针对产品、部分运营和测试
- 2025-06-08 Checklist知多少?超详细的项目检查清单,PM必备!
- 2025-06-08 收藏|空调、制冷仪器、仪表词汇中英文对照表
- 2025-06-08 shell脚本守护node-red进程,让程序一直运行
- 2025-06-08 在linux系统下运行 .net core 程序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)