PM2 是具有内置负载平衡器的 Node.js 应用程序的生产进程管理器。它使您可以永久保持应用程序的活动状态,无需停机即可重新加载应用程序,并且可以使常见的系统管理任务更容易
在生产模式下启动应用程序非常简单:
$ pm2 start app.js
PM2 经过了超过 1400 次测试。
官方网站: http://pm2.keymetrics.io/
适用于 Linux(stable)& macOS(stable)& Windows(stable)。 从 Node.js 0.12 开始,所有 Node.js 版本都支持。
安装 PM2
$ npm install pm2 -g
当您安装 Node.js 时,npm 是一个内置的 CLI - 使用 NVM 安装 Node.js
启动应用程序
$ pm2 start app.js
现在,您的应用程序已被守护,被监控并保持永久激活。
官方的 Docker 图像
Docker Hub PM2 image:
使用 pm2-docker 命令行接口:
FROM keymetrics/pm2:latest
[...]
CMD [ "pm2-docker", "start", "ecosystem.config.js" ]
更多 Docker/PM2 集成: pm2 Docker 支持
监控器 PM2 和 应用程序
要监控你的应用程序,只需键入:
$ pm2 register
更新 PM2
# 安装 PM2 的最新版本
$ npm install pm2@latest -g
# 保存进程列表,退出旧的 PM2 并恢复所有进程
$ pm2 update
PM2 无缝更新
主要特性
命令概述
# 常规
$ npm install pm2 -g # 安装 PM2
$ pm2 start app.js # 启动,后台运行并自动重启应用程序 (Node)
$ pm2 start app.py # 启动,后台运行并自动重启应用程序 (Python)
$ pm2 start npm -- start # 启动,后台运行并自动重启 Node 应用程序
# 集群模式 (仅限 Node.js )
$ pm2 start app.js -i 4 # 在集群模式下启动 4 个应用程序实例,它将为每个应用程序加载平衡网络查询(负载均衡)
$ pm2 reload all # 0 秒停机重新加载
$ pm2 scale [app-name] 10 # 集群应用程序规模为 10 个集成
# 过程监控
$ pm2 list # 列出所有使用 PM2 启动的进程
$ pm2 monit # 显示每个应用程序的内存和 cpu 使用情况
$ pm2 show [app-name] # 显示关于应用程序的所有信息
# 日志管理
$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志
$ pm2 logs --json # JSON格式的日志
$ pm2 flush
$ pm2 reloadLogs
# 进程状态管理
$ pm2 start app.js --name="api" # 启动应用程序并命名为 “api”
$ pm2 start app.js -- -a 34 # 启动应用程序并传递选项 "-a 34" 作为参数
$ pm2 start app.js --watch # 文件更改时,重启应用程序
$ pm2 start script.sh # 启动 bash 脚本
$ pm2 start app.json # 启动在 app.json 中声明的所有应用程序
$ pm2 reset [app-name] # 重置所有计数器
$ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 使用 id 0 停止所有 进程
$ pm2 restart all # 重启所有应用程序
$ pm2 gracefulReload all # 在集群模式下优雅地重新加载所有应用程序
$ pm2 delete all # 杀死和删除所有应用程序
$ pm2 delete 0 # 使用 id 0 删除所有应用程序
# Startup/Boot 管理
$ pm2 startup # 检测初始化系统,在启动时生成和配置pm2 boot
$ pm2 save # 保存当前进程列表
$ pm2 resurrect # 恢复以前保存的进程
$ pm2 unstartup # 禁用和移除启动系统
$ pm2 update # 保存进程,杀死 PM2 进程并恢复进程
$ pm2 generate # 生成一个样本 json 配置文件
# 部署
$ pm2 deploy app.json prod setup # 设置 "prod" 远程服务器
$ pm2 deploy app.json prod # 更新 "prod" 远程服务器
$ pm2 deploy app.json prod revert 2 # 使用 2 恢复 "prod" 远程服务器
# 模块系统
$ pm2 module:generate [name] # 生成带有名称 [name] 的样例模块
$ pm2 install pm2-logrotate # 安装模块 (这里是一个 log 循环系统)
$ pm2 uninstall pm2-logrotate # 卸载模块
$ pm2 publish # 增加版本, git push 和 npm publish
进程管理
一旦应用程序启动,您就可以轻松地列出和管理它们:
列出所有正在运行的进程:
$ pm2 list
管理进程是很简洁明了的:
$ pm2 stop <app_name|id|'all'|json_conf>
$ pm2 restart <app_name|id|'all'|json_conf>
$ pm2 delete <app_name|id|'all'|json_conf>
为了确保它对 json_conf
中声明的环境变量进行重新计算,可以将其作为参数传递,并且可以从 json_conf
中选择自定义的 env
名称:
$ pm2 restart <json_conf> [--env <env_name>]
获得关于指定进程的更多细节:
$ pm2 describe <id|app_name>
负载平衡 & 0 秒停机重新加载
当应用程序使用 -i <instance_number>
选项启动时,集群模式 是被启用的。
集群模式启动了您的应用程序的 <instance_number>
实例,并在每个实例之间自动负载平衡 HTTP/TCP/UDP。这允许根据可用 CPU 的数量来增加总体性能。
所有主要节点的无缝支持。js框架和任何节点。js应用程序不需要任何代码更改:
所有主流的 Node.js 框架和任何 Node.js 应用程序都无缝支持,不需要更改任何代码
主要命令:
$ pm2 start app.js -i max # 启用负载平衡器并启动 'max' 实例(cpu nb)
$ pm2 reload all # 0 秒停机重新加载
$ pm2 scale <app_name> <instance_number> # 增加/减少 进程数量
CPU / Memory 监控
监控所有进程启动:
$ pm2 monit
日志设施
实时显示指定进程或所有进程的日志。标准的、原始的、JSON 和格式化的输出都可用。
$ pm2 logs ['all'|app_name|app_id] [--json] [--format] [--raw]
示例:
$ pm2 logs APP-NAME # 显示 APP-NAME 日志
$ pm2 logs --json # JSON 输出
$ pm2 logs --format # 格式化输出
$ pm2 flush # 冲洗所有日志
$ pm2 reloadLogs # 重新加载所有日志
启动脚本生成
在每次服务器重启时,PM2 都会生成并配置一个启动脚本,以保持 PM2 和 进程活跃。
支持初始系统,如: systemd (Ubuntu 16, CentOS, Arch), upstart (Ubuntu 14/12), launchd (MacOSx, Darwin), rc.d (FreeBSD).
# 自动检测初始系统 + 在服务器启动时生成和设置 PM2 boot
$ pm2 startup
# 手动指定启动系统
# 可以是: systemd, upstart, launchd, rcd
$ pm2 startup [platform]
# 在服务器启动时禁用和移除 PM2
$ pm2 unstartup
在重新启动(reboot)时保存/冻结(save/freeze )一个进程列表:
$ pm2 save
模块系统
PM2 嵌入了一种简单而强大的模块系统。安装模块很简单:
$ pm2 install <module_name>
下面是一些与 PM2 兼容的模块(由 PM2 管理的独立的 Node.js 应用程序):
pm2-logrotate auto rotate logs of PM2 and applications managed
pm2-webshell expose a fully capable terminal in browsers
pm2-server-monit monitor your server health
Keymetrics 监控
如果你用 PM2 来管理你的 NodeJS 应用,那么 Keymetrics 可以使监控和管理服务器上的应用变得简单。 试一试:
谢谢您的帮助,我们希望您喜欢我们的 PM2 。
更多关于 PM2
- 通过 JS 文件的应用程序声明
- Watch & Restart
- PM2 API
- 部署工作流程
- PM2 on Heroku/Azure/App Engine
- PM2 自动完成
- 在 ElasticBeanStalk 中使用 PM2
- PM2 教程系列
更新日志
贡献者
License
PM2 is made available under the terms of the GNU Affero General Public License 3.0 (AGPL 3.0). We can deliver other licenses, for more informations contact sales.