- 文档
- 知识库
- 教程
- 开发工具
【免费下载链接】reference
为开发人员分享快速参考备忘清单(速查表)
PM2 是一个广受欢迎的 Node.js 进程守护(daemon)管理器,用于让应用程序保持在线、自动重启并支持集群负载均衡。本篇以开源仓库 jaywcjlove/reference 中的 PM2 备忘清单 为主体,系统梳理从安装、启动、进程管理到集群模式、生态系统文件与开机自启的完整链路,并逐条解读 CLI 选项与速查命令,帮你快速掌握一套可直接落地的生产级进程管理方案。
认识 PM2 与本文速查表
PM2 以简单直观的 CLI 形式提供守护进程能力:它能托管 Node.js 脚本,也能托管 bash 脚本、Python 脚本乃至二进制可执行文件,并在崩溃后自动拉起、记录日志、暴露实时监控指标。仓库 jaywcjlove/reference 将其整理为一份速查表文档,存放于 docs/pm2.md,并在 README.md 首页索引中收录,与 Bash、Docker、Nginx 等大量开发速查表并列,方便开发者随时检索。
安装与启动应用程序
安装 PM2
最新的 PM2 版本可通过 NPM 或 Yarn 全局安装:
$ npm install pm2@latest -g或者:
$ yarn global add pm2安装后pm2命令即可全局使用。仓库使用 Node.js >= 16 作为构建环境(参见 package.json),实际运行 PM2 时同样建议使用较新的 Node 版本。
启动任意类型的应用程序
启动、守护并监控一个应用程序,最简单的方式是指定脚本或可执行文件路径:
$ pm2 start app.jsPM2 并不局限于 Node.js,它可以托管多种运行时:
$ pm2 start bashscript.sh $ pm2 start python-app.py --watch $ pm2 start binary-file -- --port 1520- 启动 bash 脚本、Python 脚本时,PM2 会依据文件类型选择对应的解释器执行;
- 启动二进制文件时,
--之后的参数会原样传递给该程序(上例中即把--port 1520传给binary-file)。
常用 CLI 选项
pm2 start支持大量选项,备忘清单中整理了以下高频项:
| 选项 | 作用 |
|---|---|
--name <app_name> | 为应用指定名称,便于后续用名称管理进程 |
--watch | 监视文件变更,变更时自动重启应用 |
--max-memory-restart <200MB> | 设置内存阈值,应用占用超过该值时自动重启 |
--log <log_path> | 指定日志文件路径 |
-- arg1 arg2 arg3 | 将额外参数传递给被启动的脚本 |
--restart-delay <delay in ms> | 设置自动重启之间的延迟(毫秒) |
--time | 为日志行添加时间前缀 |
--no-autorestart | 关闭自动重启(应用崩溃时不自动拉起) |
--cron <cron_pattern> | 按 cron 表达式强制定时重启应用 |
--no-daemon | 以前台方式运行,日志直接输出到当前终端 |
这些选项可以自由组合,例如--name my-api --max-memory-restart 300MB --time即可得到一个命名清晰、带内存保护、日志带时间戳的守护进程。
进程生命周期管理
核心管理命令
启动之后,应用的状态由 PM2 守护进程统一管理,常用的生命周期命令如下:
$ pm2 restart app_name $ pm2 reload app_name $ pm2 stop app_name $ pm2 delete app_namerestart:停止进程并重新启动,会短暂中断服务;reload:优雅重载,对于网络型(NETWORKED)应用可实现 0 秒停机(详见下文“集群模式”);stop:暂停进程,但保留在 PM2 进程列表中,可通过start再次拉起;delete:将进程从 PM2 列表中彻底移除。
app_name 的两种替代写法
除了直接写应用名称,还可以使用两种通配写法:
all—— 作用于所有进程,例如pm2 restart all;id—— 作用于指定的进程 ID,例如pm2 restart 0。
检查状态、日志与监控指标
应用启动后,可以随时检查运行状态、日志与资源指标:
$ pm2 [list|ls|status] # 列出 PM2 管理的所有应用的状态 $ pm2 logs # 实时流式显示日志 $ pm2 logs --lines 200 # 挖掘旧日志,回看最近 200 行 $ pm2 monit # 适合终端查看的实时仪表板(CPU/内存等) $ pm2 plus # 基于 Web 的跨服务器诊断仪表板(pm2.io)pm2 list(别名ls、status)展示每个进程的名称、ID、重启次数、运行时长与内存占用;pm2 monit直接在终端渲染实时资源曲线,是排查内存泄漏最常用的命令;- 若需要跨多台服务器的集中式可视化监控,可使用
pm2 plus接入在线仪表板。
集群模式:自动负载均衡
对于 Node.js 应用,PM2 内置自动负载均衡器,会在每个衍生出的工作进程(worker)之间共享所有 HTTP[s]、Websocket、TCP 与 UDP 连接:
$ pm2 start app.js -i max-i指定实例数量:
-i max(或-i 0)表示根据服务器可用 CPU 核数启动最大数量的进程,充分利用多核;-i 4表示固定启动 4 个实例。
在集群模式下,pm2 reload才能发挥真正价值:它采用滚动方式逐个重启 worker,从而实现请求不间断的零停机发布;而pm2 restart会整体重启,存在短暂服务中断。这也是速查表中强调“reload 对 NETWORKED 应用可实现 0s 停机”的原因。
生态系统文件(Ecosystem File)
当需要管理多个应用、维护复杂环境变量时,可以创建一份声明式配置文件——生态系统文件。生成命令:
$ pm2 ecosystem该命令会在当前目录生成ecosystem.config.js,典型内容如下:
module.exports = { apps : [{ name: "app", script: "./app.js", env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }, { name: 'worker', script: 'worker.js' }] }要点解读:
apps是应用数组,可同时声明多个应用(上例同时管理app与worker两个进程);script指定入口脚本,name指定进程名;env定义默认环境变量;env_production是名为production的环境覆盖块;- 启动时配合
--env production即可切换环境,例如:
$ pm2 start ecosystem.config.js --env production当然,也可以直接不带参数启动默认配置:
$ pm2 start ecosystem.config.js声明式配置把名称、脚本、环境变量固化到文件中,配合版本控制即可实现团队统一的部署约定。
设置开机自启动脚本
服务器重启后,由 PM2 托管的进程不会自动恢复,必须让 PM2 本身随系统启动。解决方法是先保存当前进程快照,再生成系统启动脚本:
$ pm2 savepm2 save会把当前进程列表写入 dump 文件;随后(在支持 systemd 等 init 系统的环境下)还需执行pm2 startup生成对应的开机启动服务,将 PM2 注册为系统服务,从而在服务器每次启动/重启时自动恢复全部托管进程。备忘清单中强调:“使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要”,这一步是生产环境部署的必选项。
文件变更自动重启
开发场景下,希望代码保存后应用立即生效,只需配合--watch选项:
$ cd /path/to/my/app $ pm2 start env.js --watch --ignore-watch="node_modules"--watch会监视当前目录及所有子文件夹,任何文件变更都会触发应用重启;--ignore-watch="node_modules"用于排除依赖目录,避免安装依赖或 node_modules 内的无关变更反复触发重启。
重启发生后,可以通过日志确认:
$ pm2 logs日志中会记录进程的重启动作与时间点,方便核对 watch 是否按预期工作。
高频命令速查(CheatSheet)
备忘清单第二部分集中整理了一组高频命令,适合日常随手查阅:
分叉模式(Fork Mode)
$ pm2 start app.js --name my-api # 名称进程默认即分叉模式,每个应用由独立进程承载,适合普通脚本与单实例服务。
集群模式(Cluster Mode)
$ pm2 start app.js -i 0 # 根据可用 CPU 使用负载均衡启动最大进程 $ pm2 start app.js -i max # 与上面相同(该写法已标记为弃用) $ pm2 scale app +3 # 为 `app` 增加 3 个 worker $ pm2 scale app 2 # 将 `app` 扩展到总共 2 个 worker(可上可下)pm2 scale支持动态调整实例数:+3表示增量扩容,2表示以 2 为目标的绝对伸缩。
进程清单
$ pm2 list # 显示所有进程状态 $ pm2 jlist # 以原始 JSON 格式打印进程列表 $ pm2 prettylist # 以美化 JSON 格式打印进程列表 $ pm2 describe 0 # 显示特定进程的全部信息 $ pm2 monit # 监控所有进程jlist/prettylist输出的 JSON 结构便于脚本化集成与 CI 自动化判断进程健康状态。
日志管理
$ pm2 logs [--raw] # 流式显示所有进程日志(--raw 输出原始格式) $ pm2 flush # 清空所有日志文件 $ pm2 reloadLogs # 重新加载所有日志批量动作
$ pm2 stop all # 停止所有进程 $ pm2 restart all # 重启所有进程 $ pm2 reload all # 零停机重载(适用于 NETWORKED 应用) $ pm2 stop 0 # 停止指定进程 ID $ pm2 restart 0 # 重启指定进程 ID $ pm2 delete 0 # 从 pm2 列表删除指定进程 $ pm2 delete all # 从 pm2 列表删除所有进程杂项命令
$ pm2 reset <process> # 重置进程元数据(如重启计数) $ pm2 updatePM2 # 更新内存中的 pm2 $ pm2 ping # 确认 pm2 守护进程已启动 $ pm2 sendSignal SIGUSR2 my-app # 向脚本发送系统信号 $ pm2 start app.js --no-daemon $ pm2 start app.js --no-vizion $ pm2 start app.js --no-autorestartpm2 ping返回{ "pong": ... }即表示守护进程存活,常用于健康检查脚本;sendSignal支持向进程发送任意系统信号(如SIGUSR2),便于触发自定义逻辑;--no-vizion用于禁用版本控制系统元数据采集,--no-autorestart用于完全关闭自动重启。
更新 PM2
PM2 的版本升级被设计得很简单,版本之间没有破坏性变化,流程只有两步:
$ npm install pm2@latest -g # 升级全局安装的版本然后更新内存中正在运行的 PM2 守护进程:
$ pm2 updatepm2 update会以新版本重启守护进程并恢复之前保存的进程列表,配合先前的pm2 save快照即可做到无缝升级,无需手工重新启动每个应用。
在仓库中使用这份速查表
本文内容对应的原始文档位于 docs/pm2.md,采用仓库统一的速查表 Markdown 规范编写(h1大标题 + 介绍文本 +h2分类 +h3卡片式小节)。该仓库通过refs-cli将docs/*.md编译为静态 HTML 页面(参见 package.json),本地执行npm run start可监听 Markdown 变化并实时预览,npm run build会输出到dist目录。因此你可以直接在浏览器中以页面形式浏览本文全部命令,也可以在任意开发机上复制命令逐条演练。
至此,从安装启动、选项调优、进程管理、集群伸缩、声明式配置、开机自启到版本升级,PM2 的核心使用路径已全部覆盖。将本文与仓库中的 docs/pm2.md 配合使用,即可在日常开发与生产部署中快速定位任何一条 PM2 命令。
- 文档
- 知识库
- 教程
- 开发工具
【免费下载链接】reference
为开发人员分享快速参考备忘清单(速查表)
相关推荐
Docker 命令速查与实战指南:jaywcjlove/reference 容器化备忘清单
Docker 命令速查与实战指南:jaywcjlove/reference 容器化备忘清单 本文基于 jaywcjlove/reference 开源仓库中的 D
文档知识库教程开发工具JavaScript 速查表:jaywcjlove/reference 中的 JavaScript 备忘清单全解析
JavaScript 速查表:jaywcjlove/reference 中的 JavaScript 备忘清单全解析 本指南以开源仓库 jaywcjlove/re
文档知识库教程开发工具HTML 与 HTML5 速查手册:Jaywcjlove Reference 项目 HTML 备忘清单实战详解
HTML 与 HTML5 速查手册:Jaywcjlove Reference 项目 HTML 备忘清单实战详解 本指南以开源仓库 jaywcjlove/refe
文档知识库教程开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考