Skip to main content

PM2 进程管理工具的使用

PM2 是 node 进程管理工具,可用于进程守护、多进程的启动和线上日志记录等功能。

一、安装与启动

安装:

npm install pm2 -g

启动:

package.json
"scripts": {
"dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
"prd": "cross-env NODE_ENV=production pm2 start bin/www",
},

运行效果:

二、常用命令

# 启动
pm2 start <AppName>/<id>

# 列表
pm2 list

# 重启
pm2 restart <AppName>/<id>

# 停止
pm2 stop <AppName>/<id>

# 删除
pm2 delete <AppName>/<id>

# 信息
pm2 info <AppName>/<id>

# 日志
pm2 log <AppName>/<id>

# cpu、内存占用信息
pm2 monit <AppName>/<id>

三、进程守护

通过 node app.jsnodemon app.js 运行 Server 时,如果进程崩溃则进行后续的访问,而 PM2 遇到进程崩溃,会自动重启。

四、常用配置

首先新建 PM2 配置文件(包括进程数量,日志文件目录等)

pm2.config.json
{
"apps": {
"name": "pm2-test-server",
// 启动文件,单个文件的话写为 app.js
"script": "bin/www",
// 是否监听文件变化,自动重启服务
"watch": true,
// 忽略监听的文件
"ignore_watch": [
"node_modules",
"logs"
],
// 多进程(CPU 核数)设置 auto 的话则自动匹配
"instances": 4,
// 生成 .error 日志的文件
"error_file": "logs/err.log",
// 生成 .log 日志的文件
"out_file": "logs/out.log",
// 日志中每一行加个时间
"log_date_format": "YYYY-MM-DD HH:mm:ss"
}
}

然后修改 PM2 启动命令,重启:

package.json
"scripts": {
"dev": "cross-env NODE_ENV=dev ./node_modules/.bin/nodemon bin/www",
"prd": "cross-env NODE_ENV=production pm2 start bin/www",
"prd": "cross-env NODE_ENV=production pm2 start pm2.config.json",
},
  • 访问 server,检查日志文件的内容(日志记录是否生效)

五、多进程启动

1、为什么要使用多进程

  • 操作系统限制一个进程的内存;
  • 无法充分利用机器全部内存;
  • 无法充分利用多核 CPU 的优势。

2、多进程和 redis

  • 多进程之间,内存无法共享;
  • 多进程访问一个 redis,实现数据共享。