PM2 (Process Manager 2) 是 Node.js 应用程序的一个带有内置负载均衡器的生产级进程管理器。
PM2 的核心特性
- 后台运行 (Daemonize):即使关闭 SSH 终端,Node.js 应用也会继续在后台运行。
- 崩溃自动重启 (Auto-Restart):如果应用因为意外错误崩溃(Crash),PM2 会瞬间将其重新启动,保证服务不中断。
- 集群模式 (Cluster Mode):Node.js 默认是单线程的。PM2 可以一键开启集群模式,利用服务器的多核 CPU 提高并发处理能力,且内置了负载均衡。
- 零停机重载 (Zero-downtime Reload):在更新代码后,可以在不中断现有用户连接的情况下重新加载应用。
- 开机自启 (Startup Scripts):服务器重启后,PM2 可以自动拉起所有应用。
- 日志管理 (Log Management):统一收集并管理
console.log和console.error输出的信息。 - 终端监控面板 (Monit):提供一个基于终端的图形化监控界面,可以实时查看 CPU 和内存占用。
如何安装
通过 npm 将 PM2 全局安装,因为它是作为一个系统级工具来管理进程的:
npm install pm2 -g(安装完成后,可以通过 pm2 -v 检查版本)
常用基础命令
假设 Node.js 入口文件是 app.js:
启动应用
# 最基础的启动
pm2 start app.js
# 启动并给进程命名(推荐,方便后续管理)
pm2 start app.js --name `my-api`
# 启动并监听文件变化(代码修改后自动重启,适合开发环境)
pm2 start app.js --watch查看和监控
# 列出所有由 PM2 管理的进程状态
pm2 list # 或 pm2 ls
# 实时查看终端仪表盘(CPU、内存、请求等)
pm2 monit
# 查看特定应用的详细信息
pm2 show `my-api` # 或者用进程的 ID: pm2 show 0停止、重启和删除
# 停止应用
pm2 stop `my-api` # 也可以是进程 ID,例如 pm2 stop 0
pm2 stop all # 停止所有应用
# 重启应用
pm2 restart `my-api`
pm2 restart all
# 零停机重载(生产环境推荐使用 reload 代替 restart)
pm2 reload `my-api`
# 把应用从 PM2 的管理列表中删除
pm2 delete `my-api`
pm2 delete all日志管理
# 查看所有应用的实时日志
pm2 logs
# 查看指定应用的日志
pm2 logs `my-api`
# 查看特定行数的历史日志
pm2 logs --lines 100进阶与生产环境用法
开启多核集群模式 (Cluster Mode)
如果有一台 8 核的服务器,可以用以下命令让应用跑满 8 个核心,PM2 会自动把访问请求分发给各个核心:
# -i max 表示启动与 CPU 核心数相同的实例数量
pm2 start app.js -i max配置文件部署 (Ecosystem File)
在管理多个应用或者需要配置环境变量时,命令行参数会变得非常长。PM2 支持使用配置文件管理:
# 生成配置文件 ecosystem.config.js
pm2 init配置文件示例 (ecosystem.config.js):
module.exports = {
apps: [
{
name: `my-api`,
script: `./app.js`,
instances: `max`, // 集群模式
exec_mode: `cluster`,
env_production: {
NODE_ENV: `production`,
PORT: 8080
}
}
]
};配置好后,只需一条命令即可根据配置文件启动:
pm2 start ecosystem.config.js --env production设置开机自启
为了防止服务器突然断电重启导致服务挂掉,可以设置开机自启:
# 1. 生成并在终端输出一段启动脚本(需复制粘贴执行)
pm2 startup
# 2. 保存当前在运行的进程列表
pm2 save(以后每次新增或删除了常驻进程,都记得运行一次 pm2 save)
总结
在本地开发时,我们通常用 node 或 nodemon;而在将 Node.js 项目部署到真实的生产服务器时,PM2 是必不可少的标准配置。它让应用的运行更加健壮、高效且易于维护。
最近更新
最新评论