news 2026/8/24 21:50:52

PM2 从入门到精通:Node.js 进程管理的最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PM2 从入门到精通:Node.js 进程管理的最佳实践

PM2 从入门到精通:Node.js 进程管理的最佳实践

作为前端/Node.js 开发者,你是否遇到过这些问题:npm run dev后台运行自动挂掉、服务器重启后项目需要手动启动、进程崩溃无日志可查、多个 Node 项目管理混乱……

PM2(Process Manager 2)是 Node.js 生态中最流行的进程管理工具,能完美解决以上问题。本文从安装、核心用法、配置优化、实战场景四个维度,带你彻底掌握 PM2 的使用。

一、为什么选择 PM2?

相比nohup/&等临时方案,PM2 有不可替代的优势:

  • 🚀进程守护:进程崩溃/服务器重启后自动重启
  • 📝日志管理:统一收集 stdout/stderr,支持日志轮转
  • 性能监控:实时监控 CPU、内存、请求量等指标
  • 🎛️多进程管理:一键启动/停止/重启多个 Node 项目
  • 🔄零停机重载:更新代码后无需中断服务即可重启
  • 📦跨平台:兼容 Linux/macOS/Windows

二、快速上手:核心安装与基础命令

1. 全局安装 PM2

# npm 安装(推荐)npminstall-gpm2# yarn 安装yarnglobaladdpm2# 验证安装(输出版本号即成功)pm2-v

2. 启动第一个项目

# 基础用法:启动 npm 脚本(如 dev/build/start)pm2 startnpm--name"my-app"-- run dev# 简化写法(无自定义名称)pm2 startnpm-- run dev# 直接启动 Node 文件pm2 start app.js--name"api-server"

参数说明:

  • --name "my-app":给进程命名(后续管理更方便)
  • -- run dev:传递给npm的参数(即执行npm run dev

3. 核心管理命令

命令作用
pm2 list查看所有运行的进程
pm2 stop <name/id>停止指定进程(如pm2 stop my-app
pm2 restart <name/id>重启指定进程
pm2 delete <name/id>停止并删除进程(清理记录)
pm2 stop all停止所有进程
pm2 restart all重启所有进程
pm2 delete all删除所有进程

4. 日志查看(排障核心)

# 实时查看指定进程日志(推荐)pm2 logs my-app# 查看所有进程日志pm2 logs# 查看最后 100 行日志pm2 logs my-app--lines100# 实时监控日志(类似 tail -f)pm2 logs my-app-f

三、进阶配置:用配置文件管理项目

手动输入命令不够优雅?PM2 支持配置文件(JSON/YAML/JS),推荐用ecosystem.config.js统一管理多项目。

1. 生成默认配置文件

# 生成示例配置文件pm2 init simple

2. 自定义配置文件(实战版)

创建ecosystem.config.js(放在项目根目录):

module.exports={apps:[// 第一个项目:前端 dev 服务{name:"front-dev",// 进程名script:"npm",// 执行脚本args:"run dev",// npm 参数cwd:"/usr/local/projects/frontend",// 项目根目录instances:1,// 启动实例数(dev 模式建议 1)autorestart:true,// 崩溃自动重启watch:false,// dev 模式不建议开启(避免和 vite/webpack 监听冲突)max_memory_restart:"1G",// 内存超过 1G 自动重启env:{NODE_ENV:"development",// 开发环境变量PORT:3000},// 日志配置output:"./logs/front-out.log",// 标准输出日志error:"./logs/front-err.log",// 错误日志log_date_format:"YYYY-MM-DD HH:mm:ss"// 日志时间格式},// 第二个项目:后端 API 服务{name:"api-server",script:"app.js",// 直接启动 Node 文件cwd:"/usr/local/projects/backend",instances:"max",// 启动尽可能多的实例(多核利用)autorestart:true,watch:true,// 监听文件变化自动重启(生产环境慎用)env:{NODE_ENV:"production",PORT:8080}}]};

3. 通过配置文件启动/管理

# 启动配置文件中的所有项目pm2 start ecosystem.config.js# 只启动指定项目pm2 start ecosystem.config.js--onlyfront-dev# 重启配置文件中的项目(配置修改后生效)pm2 restart ecosystem.config.js

四、生产环境必备优化

1. 设置 PM2 开机自启

# 生成开机自启配置pm2 startup# 执行上述命令输出的提示命令(如)# sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u root --hp /root# 保存当前进程列表(开机后自动恢复)pm2 save

2. 日志轮转(避免日志文件过大)

# 安装日志轮转插件pm2installpm2-logrotate# 配置轮转规则(示例:按大小轮转,最大 100M,保留 10 个文件)pm2setpm2-logrotate:max_size 100M pm2setpm2-logrotate:retain10pm2setpm2-logrotate:compresstrue# 压缩旧日志pm2setpm2-logrotate:dateFormat YYYY-MM-DD-HH-mm-ss# 日志命名格式

3. 零停机重载(生产环境更新代码)

# 重载进程(不中断服务)pm2 reload my-app# 重载所有进程pm2 reload all

4. 监控进程状态

# 实时监控面板(CPU、内存、日志、进程数)pm2 monit# 查看进程详细信息pm2 show my-app# 导出监控数据(JSON 格式)pm2 dump

五、常见问题与解决方案

1. PM2 启动npm run dev后自动退出?

  • 原因:dev 模式(vite/webpack)依赖终端交互,或端口被占用
  • 解决:
    // 在 ecosystem.config.js 中添加配置{name:"front-dev",script:"npm",args:"run dev -- --host 0.0.0.0 --force",// 强制启动,忽略终端检测merge_logs:true,// 合并子进程日志kill_timeout:5000,// 延长进程终止超时时间}

2. 权限不足导致日志无法写入?

  • 解决:指定有权限的日志目录(如/tmp),或修改目录权限:
    mkdir-p/usr/local/projects/frontend/logschmod777/usr/local/projects/frontend/logs

3. PM2 启动后端口未监听?

  • 步骤 1:查看日志找错误pm2 logs my-app
  • 步骤 2:检查端口是否被占用lsof -i:3000
  • 步骤 3:确认项目根目录cwd配置正确

六、PM2 常用命令速查表

场景命令
安装npm install -g pm2
启动 npm 脚本pm2 start npm --name "app" -- run dev
启动配置文件pm2 start ecosystem.config.js
查看进程pm2 list
查看日志pm2 logs <name>
重启进程pm2 restart <name>
开机自启pm2 startup && pm2 save
实时监控pm2 monit
日志轮转pm2 install pm2-logrotate

总结

  1. PM2 是 Node.js 进程管理的首选工具,相比nohup更稳定、功能更全面,尤其适合生产环境;
  2. 核心用法:pm2 start npm --name "xxx" -- run xxx启动项目,pm2 logs排查问题,配置文件统一管理多项目;
  3. 生产环境必做:设置开机自启、配置日志轮转、使用零停机重载,确保服务高可用。

通过 PM2,你可以彻底告别手动管理 Node 进程的繁琐,让项目部署和维护更高效、更稳定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 21:49:41

VMware虚拟机配置桥接网络

转载&#xff1a;虚拟机桥接网络配置 一、VMware三种网络连接方式 VMware提供了三种网络连接方式&#xff0c;VMnet0, VMnet1, Vmnet8&#xff0c;分别代表桥接&#xff0c;Host-only及NAT模式。在VMware的编辑-虚拟网络编辑器可看到对应三种连接方式的设置&#xff08;如下图…

作者头像 李华
网站建设 2026/8/24 21:49:57

C# 后端集成 CodeBuddy CLI 实战指南

C# 后端集成 CodeBuddy CLI 实战指南 本文将详细介绍如何在 C# 后端项目中集成 CodeBuddy CLI&#xff0c;实现 AI 编程助手能力的完整方案。 背景 在现代 AI 代码助手开发中&#xff0c;单一 AI Provider 往往无法满足复杂多变的开发场景。这就像&#xff0c;人生路远&#x…

作者头像 李华
网站建设 2026/7/14 16:50:44

windows系统使用bat命令文件启动redis

windows系统使用bat命令文件启动redis 最近的项目中使用到了redis&#xff0c;自身电脑系统用的是windows&#xff0c;但是redis的服务启动和连接全部都需要进入到该redis所在的文件夹中&#xff0c;有些麻烦&#xff0c;想到了一些解决方案 方案一 就是为该文件夹创建一个快捷…

作者头像 李华
网站建设 2026/7/14 16:50:45

2026年沈阳二手表回收实体店TOP排名出炉,哪家出价高你知道吗?

嘿&#xff0c;表友们&#xff01;最近2026年沈阳二手表回收实体店TOP排名新鲜出炉啦&#xff0c;不少人都在琢磨着哪家出价高&#xff0c;能让自己手里的二手表卖出个好价钱。今天咱就来好好唠唠这事儿&#xff0c;顺便给大家推荐一家靠谱的二手表回收店——二掌柜收表。排名背…

作者头像 李华
网站建设 2026/7/14 16:50:29

ssm+java2026年毕设社区生鲜配送系统【源码+论文】

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于电商管理系统的研究&#xff0c;现有研究主要以大型综合电商平台&#xff08;如淘宝、京东&#xff09;的系统架构和运营模…

作者头像 李华
网站建设 2026/7/14 16:50:30

YOLOv12全网首发:CVPR2026 Transformer注意力 | BinaryAttention 1-bit注意力,推理提速100%,超越FlashAttention2

💡💡💡问题点:Transformer 已取得广泛而显著的成功,但其注意力模块的计算复杂性仍然是视觉任务的主要瓶颈。现有方法主要采用 8-bit 或 4-bit 量化来平衡效率与精度 💡💡💡措施:我们通过理论论证指出,注意力的二值化保留了基本的相似性关系,并提出了 BinaryAt…

作者头像 李华