PM2

PM2是node应用进程管理工具,可以用它简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等

不使用PM2时,在工作中遇到服务器重启后,需要一个个去重新启动每个服务,这样不仅繁琐、效率低,而且容易忘记开启一些服务

PM2的主要特性:

  • 内建负载均衡(使用Node cluster集群模块)
  • 后台运行
  • 0秒停机重载
  • 具有Ubuntu和CentOS的启动脚本
  • 自动停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供HTTP API
  • 远程控制和实时的接口API(Nodejs 模块,允许和PM2进程管理器交互)

安装和使用

安装PM2:

1
npm install -g pm2

启动PM2服务:

1
$ pm2 start app.js

如果启动成功,status就为online:


启动PM2服务并监听文件变化,更改文件后服务会自动重启:

1
$ pm2 start app.js --watch

启动PM2服务并配置集群数,实现负载均衡,n为数字时指定进程数,为0或max时是机器最大进程数:

1
$ pm2 start app.js -i "num"

启动PM2服务并自定义服务名:

1
$ pm2 start app.js -n "name"


查看PM2日志:

1
$ pm2 log


查看PM2服务表:

1
$ pm2 list


根据id或名字停止某一个服务:

1
$ pm2 stop 0


根据id或名字重启某一个服务:

1
$ pm2 restart index

停止所有服务:

1
$ pm2 stop all

根据id删除某一个服务:

1
$ pm2 delete 0


删除所有服务:

1
$ pm2 delete all

监控PM2的进程状态:

1
$ pm2 monit

配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"apps": {
"name": "express_project", // 项目名
"script": "app.js", // 执行文件
"cwd": "./", // 根目录
"args": "", // 传递给脚本的参数
"interpreter": "", // 指定的脚本解释器
"interpreter_args": "", // 传递给解释器的参数
"watch": true, // 是否监听文件变动然后重启
"ignore_watch": [ // 不用监听的文件
"node_modules",
"public"
],
"exec_mode": "cluster_mode", // 应用启动模式,支持 fork 和 cluster 模式
"instances": "max", // 应用启动实例个数,仅在 cluster 模式有效 默认为 fork
"error_file": "./logs/app-err.log", // 错误日志文件
"out_file": "./logs/app-out.log", // 正常日志文件
"merge_logs": true, // 设置追加日志而不是新建日志
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 指定日志文件的时间格式
"min_uptime": "60s", // 应用运行少于时间被认为是异常启动
"max_restarts": 30, // 最大异常重启次数
"autorestart": true, // 默认为 true, 发生异常的情况下自动重启
"restart_delay": "60" // 异常重启情况下,延时重启时间
"env": {
"NODE_ENV": "production", // 环境参数,当前指定为生产环境
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development", // 环境参数,当前指定为开发环境
"REMOTE_ADDR": ""
},
"env_test": { // 环境参数,当前指定为测试环境
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}
}

按配置文件启动pm2服务时,应使用:

1
$ pm2 start pm2.json