news 2026/4/14 22:51:19

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/4/8 16:20:14

GLM-4.6V-Flash-WEB模型在热气球着陆点选择中的视觉辅助

GLM-4.6V-Flash-WEB模型在热气球着陆点选择中的视觉辅助 在一次山区热气球试飞任务中,飞行员正缓慢下降至预定降落区。地面风速突变,原本开阔的田野边缘突然出现一群未标记的放牧牛群——这个细节在高空肉眼难以分辨。传统依赖目视判断的方式面临严峻挑战…

作者头像 李华
网站建设 2026/4/13 3:49:31

2种方法搭建知识库,喂饭级保姆教程来啦!

前天参加了小鹅通商家在石家庄的线下沙龙,我分享了如何搭建知识库。那今天就跟大家聊聊AI知识库搭建。 大白话来说,就是将一些碎片化的知识上传到一个库里,在我需要找资料的时候直接调用。他的好处是通过你的知识库,运营AI来调用&…

作者头像 李华
网站建设 2026/4/13 21:58:55

声学之电声学

电声学是研究声能与电能相互转换原理及声信号处理技术的学科,涵盖次声波、可听声到超声波的波长范围,涉及声信号的接收、存储、加工、传输和应用 。 其核心内容包括机电类比理论和电声换能器技术。机电类比通过电路方法分析机械振动与声波现象&#xff…

作者头像 李华
网站建设 2026/4/13 18:46:02

GLM-4.6V-Flash-WEB模型对极昼极夜现象图像的地理学理解

GLM-4.6V-Flash-WEB模型对极昼极夜现象图像的地理学理解 在北极圈内的一张航拍照片中,太阳悬挂在地平线上方,整片冰原被染成金红色,没有一丝阴影。一位地理爱好者上传这张图到某个科普平台,提问:“为什么这里的太阳一直…

作者头像 李华
网站建设 2026/4/11 18:12:01

GLM-4.6V-Flash-WEB模型能否识别洞穴生态系统中的特有物种?

GLM-4.6V-Flash-WEB模型能否识别洞穴生态系统中的特有物种? 在云南哀牢山深处的一处未命名溶洞中,科研团队布设的红外相机捕捉到一只通体苍白、触角细长的节肢动物。它没有眼睛,行动缓慢,在岩石缝隙间爬行——这极可能是某种尚未被…

作者头像 李华