news 2026/2/10 10:09:55

PM2入门指南:从零开始学习Node.js进程管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PM2入门指南:从零开始学习Node.js进程管理

适合人群:Node.js新手、需要部署Node服务的开发者
核心目标:搞懂PM2是什么、怎么用,轻松实现Node服务稳定运行

一、PM2是什么?为什么需要它?

PM2 是一款专门为Node.js应用设计的守护进程管理工具,核心作用是「守护」和「管理」应用——简单说,就是让你的 Node 服务能稳定后台运行,就算意外崩溃也能自动重启,不用手动盯着。
举个例子:
平时用node index.js启动服务,一旦关闭命令行窗口,服务就停了;
如果代码报错导致服务崩溃,也得手动重新启动。

用了 PM2 后,这些问题都解决了:服务后台常驻,崩溃自动重启,还能统一管理多个服务、查看运行日志,上线部署必备!

PM2 是一个功能强大的Node.js进程管理工具,它就像一个"管家"一样守护和管理你的应用程序。想象一下,你的Node.js应用需要一个24小时不间断的守护者,PM2就是这个守护者!

PM2 核心能力总结:

  1. 守护进程:后台稳定运行,脱离命令行依赖
  2. 自动重启:服务崩溃、代码改动时自动重启
  3. 多进程管理:统一管理多个 Node 服务
  4. 内置负载均衡:充分利用多核 CPU(仅 Node 应用)
  5. 日志管理:自动记录应用输出日志,方便排查问题
  6. 监控告警:实时查看 CPU、内存使用情况

二、快速上手:安装与第一个Node服务

跟着步骤走,5分钟搞定从安装到启动的全流程!

2.1 安装PM2

全局安装(一次安装,全网可用),打开命令行输入:

npmi pm2-g# 全局安装PM2pm2-v# 验证安装成功(出现版本号即成功)

2.2 创建测试用的Node服务

我们创建两个简单的 HTTP 服务,用来演示 PM2 的管理功能:

  1. 新建文件夹(比如pm2-demo),进入文件夹后初始化项目:
mkdirpm2-demo&&cdpm2-demonpminit-y# 快速初始化package.json(一路回车即可)
  1. 新建两个文件index.jsindex2.js,分别写入以下代码:

index.js(3000端口):

lethttp=require("http");letserver=http.createServer();server.on("request",function(req, res){console.log("------------------enter 3000端口");// 日志输出 res.write("hello pm2! 3000端口");res.end();});server.listen(3000,function(){console.log(`服务器启动成功,通过 http://localhost:3000/ 进行访问`);});

index2.js(3001端口):

lethttp=require("http");letserver=http.createServer();server.on("request",function(req, res){console.log("------------------enter 3001端口");// 日志输出 res.write("hello pm2! 3001端口");res.end();});server.listen(3001,function(){console.log(`服务器启动成功,通过 http://localhost:3001/ 进行访问`);});

2.3 用PM2启动服务

进入pm2-demo文件夹,执行以下命令:

# 1. 启动单个服务(默认进程名是文件名)pm2 start index.js# 2. 启动服务并指定进程名(推荐!管理时更直观)pm2 start index.js-nnode-server-3000# 3. 启动第二个服务,指定进程名pm2 start index2.js-nnode-server-3001# 4. 启动时监听文件改动(文件改了自动重启服务,开发必备)pm2 start index.js-nnode-server-3000--watch

启动成功后,访问http://localhost:3000http://localhost:3001,能看到对应文字说明启动成功!

2.4 查看日志

用以下命令查看服务运行日志(能看到我们代码里的 console.log 输出):

pm2 log# 查看所有服务的日志pm2 log node-server-3000# 只查看指定进程名的日志

三、PM2核心特点:为什么选它管理Node服务?

PM2 能成为 Node 服务管理的首选,全靠这些实用特点:

  • 进程守护+自动重启:服务崩溃、意外退出时自动重启,不用手动干预,保证服务7x24小时运行
  • 灵活的进程配置:可自定义应用名称、启动模式、内存限制等,管理更精准
  • 集群模式+负载均衡:自动利用多核 CPU 资源,把请求分发到多个进程,提升服务并发能力(仅适用于 Node.js 应用)
  • 监听重启:开发时开启--watch,文件改动自动重启服务,省掉手动重启的麻烦
  • 日志统一管理:自动记录服务的标准输出和错误日志,方便排查问题,还能自定义日志路径
  • 系统自启动:支持 Linux 系统开机自启,服务器重启后服务自动恢复,不用重新启动
  • 监控功能:通过命令行或可视化工具查看服务的 CPU、内存使用情况,掌握运行状态
  • 部署工作流:支持测试、线上等多环境部署,自动同步代码到不同服务器
  • 编程API:提供 API 接口,可通过代码灵活管理进程(进阶需求)

四、常用命令速查表

整理了日常最常用的 PM2 命令,收藏起来随时查:

命令说明示例
应用生命周期管理
pm2 start [文件/配置] [选项]启动服务pm2 start index.js -n my-server --watch
pm2 stop [进程名/ID]停止单个服务pm2 stop my-server 或 pm2 stop 0(0是进程ID)
pm2 stop all停止所有服务pm2 stop all
pm2 restart [进程名/ID]重启单个服务pm2 restart my-server
pm2 restart all重启所有服务pm2 restart all
pm2 delete [进程名/ID]删除单个服务(配置改动后建议先删再启)pm2 delete my-server
pm2 delete all删除所有服务pm2 delete all
pm2 reload [文件/配置]重载应用(0秒停机)pm2 reload app1
监控与日志
pm2 logs查看日志pm2 logs app1
pm2 monit实时监控CPU、内存使用pm2 monit
pm2 show [进程名/id]查看单个服务的详细信息pm2 show app1
pm2 status查看状态pm2 status
进阶管理
pm2 save保存当前进程列表pm2 save
pm2 startup设置开机自启pm2 startup
pm2 update更新PM2pm2 update
pm2 flush清空所有日志pm2 flush

五、PM2两种配置方式:命令行vs配置文件

PM2 支持两种配置方式,简单需求用命令行,复杂需求用配置文件(推荐后者,更易维护)。

5.1 命令行配置(简单需求)

启动服务时直接通过选项配置,常用选项示例:

# 1. 指定进程名pm2 start index.js-nmy-server# 2. 监听文件改动pm2 start index.js--watch# 3. 指定解释器(默认是node,可指定其他)pm2 start index.js--interpreternode# 4. 启动集群模式(4个实例,利用多核)pm2 start index.js-i4# -i 后面是实例数# 查看所有选项:pm2 --help

5.2 配置文件(复杂需求,推荐)

PM2 支持jsonyml格式的配置文件,把所有配置写在文件里,启动时直接指定配置文件即可。
步骤1:创建配置文件
在项目根目录新建 processes.json(JSON格式,更通用):

{"apps":[{"name":"node-server-3000", // 进程名"script":"index.js", // 启动脚本路径"cwd":"./", // 应用启动目录(当前目录)"watch":true, // 开启监听文件改动"ignore_watch":["node_modules","logs"], // 忽略监听的文件夹"max_memory_restart":"1G", // 内存超过1G自动重启"env":{// 环境变量"NODE_ENV":"production"// 生产环境},"log_date_format":"YYYY-MM-DD HH:mm:ss", // 日志日期格式"error_file":"./logs/3000-error.log", // 错误日志路径"out_file":"./logs/3000-out.log"// 标准输出日志路径},{"name":"node-server-3001","script":"index2.js","cwd":"./","watch":true,"max_memory_restart":"1G","error_file":"./logs/3001-error.log","out_file":"./logs/3001-out.log"}]}

步骤2:启动服务
通过配置文件启动所有服务:

pm2 start processes.json

核心配置项说明

配置项作用
name进程名,唯一标识
script启动脚本的路径(核心配置)
cwd应用启动的工作目录(脚本执行的上下文目录)
watch是否监听文件改动,true/false
ignore_watch监听模式下,需要忽略的文件/文件夹(避免不必要的重启)
max_memory_restart最大内存限制,超过则自动重启(如1G、512M)
env环境变量,如NODE_ENV=production(区分开发/生产环境)
error_file/out_file错误日志和标准输出日志的存放路径
instances启动实例数,cluster模式下有效(如4表示4个实例)
exec_mode启动模式:fork(默认)、cluster(集群模式)

六、监控与日志:掌握应用运行状态

6.1 两种监控方式

方式1:命令行监控(简单直观)

pm2 monit# 实时监控CPU、内存使用情况pm2 list# 查看所有服务的运行状态(ID、名称、CPU、内存、状态)

pm2 monit启动后,按键盘方向键切换服务,能看到实时的 CPU 和内存占用,适合快速排查资源占用问题。
方式2:Keymetrics(可视化监控,进阶)
如果需要更详细的监控(如历史数据、多服务器管理),可以用 PM2 官方的Keymetrics工具——通过 web 页面可视化展示,操作更友好,适合生产环境使用(需要注册账号,免费版够用)。

6.2 日志管理:避坑关键

日志是排查问题的核心,PM2 的日志默认存放在$HOME/.pm2/目录下,分为两类:

  • PM2 自身日志$HOME/.pm2/pm2.log
  • 应用日志$HOME/.pm2/logs/[进程名]_out.log(标准输出)和 [进程名]_error.log(错误日志)

避坑提醒:如果应用有大量console.log输出,会导致日志文件急剧增大,甚至占满磁盘!
解决方案

  1. 生产环境减少不必要的 console.log;
  2. 把不需要的输出重定向到 /dev/null(Linux/Mac);
  3. 定期清理日志。

自定义日志路径:在配置文件中通过error_fileout_file指定,方便管理。

七、让服务稳定运行的小技巧

结合实际使用经验,分享几个让 Node 服务更稳定的小配置:

  1. 设置最大内存限制:通过max_memory_restart配置,避免应用内存泄漏导致服务卡死。
  2. 定时重启:用cron_restart配置定时重启(如每天凌晨3点),规避长期运行的未知问题
    "cron_restart":"0 3 * * *"// crontab格式:分 时 日 月 周
  3. 设置异常重启延迟:通过restart_delay配置异常重启的延迟时间(如2000ms),避免服务频繁重启:
    "restart_delay":2000
  4. 限制异常重启次数:用max_restarts配置最大异常重启次数,超过次数则停止重启,避免无效循环:
    "max_restarts":10, // 最大重启10次"min_uptime":3000// 运行少于3秒视为异常启动
  5. 开启系统自启:在 Linux 系统中,设置 PM2 开机自启,服务器重启后服务自动恢复:
    pm2 startup# 生成自启脚本pm2 save# 保存当前的服务列表,重启后自动启动这些服务

总结
PM2 是 Node.js 开发者必备的工具,核心价值是「让服务稳定运行、让管理更简单」。

新手入门只需掌握:

  1. 安装与启动:npm i pm2 -g、pm2 start 脚本
  2. 核心命令:启动、停止、重启、查看日志、监控
  3. 配置文件:把复杂配置写进 JSON 文件,统一管理
  4. 稳定技巧:内存限制、定时重启、系统自启
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 1:58:17

GLM-4.6V-Flash-WEB模型能否识别风筝飞行姿态与稳定性?

GLM-4.6V-Flash-WEB模型能否识别风筝飞行姿态与稳定性? 在户外放风筝的场景中,新手常会困惑:“我的风筝飞得稳吗?”“线绷得太紧是不是要掉下来了?”这类问题看似简单,却涉及对视觉信息的综合理解&#xff…

作者头像 李华
网站建设 2026/2/5 18:16:12

彻底理解CountDownLatch

CountDownLatch 是 Java 并发包(java.util.concurrent)中一个非常经典且实用的同步工具类,由 Doug Lea 设计。它的核心思想是:让一个或多个线程等待,直到其他线程完成一组操作(“倒计时归零”)后…

作者头像 李华
网站建设 2026/2/6 17:14:09

Free Fs v2.0.0-alpha 已经发布

Free Fs v2.0.0-alpha 作为一次大版本的前置测试版,主要更新聚焦在底层架构优化和功能增强上。本次版本更新亮点下表为你总结了此版本的主要变化:更新类别具体内容与解读存储架构变更移除 MinIO 支持,全面转向 S3 体系。这意味着系统将不再直…

作者头像 李华
网站建设 2026/2/6 15:55:20

GLM-4.6V-Flash-WEB模型在登山路线规划中的图像辅助判断

GLM-4.6V-Flash-WEB模型在登山路线规划中的图像辅助判断多模态AI如何改变户外安全决策? 想象这样一个场景:你正徒步在一条偏僻的山路上,前方路径被碎石覆盖,一侧是陡坡,另一侧植被稀疏。手机信号微弱,地图上…

作者头像 李华
网站建设 2026/2/8 10:29:06

GLM-4.6V-Flash-WEB模型对冻土融化迹象的遥感图像分析

GLM-4.6V-Flash-WEB模型对冻土融化迹象的遥感图像分析 在青藏高原某科研站,研究人员正面对一张来自Sentinel-2卫星的最新遥感图:地表斑驳、水体零散,疑似出现多处热融湖。过去,这样的图像需要数小时的人工判读——比对历史影像、标…

作者头像 李华
网站建设 2026/2/4 16:04:58

开发者必看:如何在实时交互系统中集成GLM-4.6V-Flash-WEB?

开发者必看:如何在实时交互系统中集成GLM-4.6V-Flash-WEB? 你有没有遇到过这样的场景:用户上传一张App界面截图,问“这个按钮是干嘛的”,而你的系统只能靠关键词匹配或预设规则生硬回应?又或者,…

作者头像 李华