pm2是什么?
官方的说法,pm2 是一个带有负载均衡功能的Node应用的进程管理器。
为什么要用pm2?
因为node.js 是单进程,进程被杀死后整个服务就挂了,所以需要进程管理工具。pm2可疑让你的独立代码利用全部的服务器上的所有 CPU,并保证进程永远都活着,0 秒的重载。
环境
保证有node.js 的环境
安装
npm install -g pm2
如果nodejs安装的路径不在/usr/local/bin/下,需要配置一下软链接:
ln -s /usr/sbin/nodejs/bin/pm2 /usr/local/bin/
配置与运行
pm2 配置方式
- 命令行方式
pm2 start xxx.js --name xxxx --interpreter xxxx
更多选项可查看pm2 --help获取;
2. 配置文件方式
pm2配置文件方式支持yml与json格式,以下是一个json配置文件:
{
"apps": [{
"name": "firekylin",
"script": "production.js",
"cwd": "/usr/local/src/firekylin",
"exec_mode": "fork",
"max_memory_restart": "1G",
"autorestart": true,
"node_args": [],
"args": [],
"env": {
}
}]
}
- name 应用进程名称;
- script 启动脚本路径;
- cwd 应用启动的路径;
- exec_mode 应用启动模式,支持fork和cluster模式;
- max_memory_restart 最大内存限制数,超出自动重启;
- autorestart 默认为true, 发生异常的情况下自动重启;
- args 传递给脚本的参数;
- env 环境变量,object类型,如{“NODE_ENV”:“production”, “ID”: “42”};
其他还有: - interpreter 指定的脚本解释器;
- interpreter_args 传递给解释器的参数;
- instances 应用启动实例个数,仅在cluster模式有效,默认为fork;
- watch 监听重启,启用情况下,文件夹或子文件夹下变化应用自动重启;
- ignore_watch 忽略监听的文件夹,支持正则表达式;
- log_date_format 指定日志日期格式,如YYYY-MM-DD HH:mm:ss;
- error_file 记录标准错误流,$HOME/.pm2/logs/XXXerr.log),代码错误可在此文件查找;
- out_file 记录标准输出流,$HOME/.pm2/logs/XXXout.log),如应用打印大量的标准输出,会导致pm2日志过大;
- min_uptime 应用运行少于时间被认为是异常启动;
- max_restarts 最大异常重启次数,即小于min_uptime运行时间重启次数;
- restart_delay 异常重启情况下,延时重启时间;
等等;
运行
pm2 startOrReload xxx.json
使用
pm2 start app.js -i 4 #后台运行pm2,启动4个app.js
# 也可以把'max' 参数传递给 start
# 正确的进程数目依赖于Cpu的核心数目
pm2 start app.js --name my-api # 命名进程
pm2 list # 显示所有进程状态
pm2 monit # 监视所有进程
pm2 logs # 显示所有进程日志
pm2 stop all # 停止所有进程
pm2 restart all # 重启所有进程
pm2 reload all # 0秒停机重载进程 (用于 NETWORKED 进程)
pm2 stop 0 # 停止指定的进程
pm2 restart 0 # 重启指定的进程
pm2 startup # 产生 init 脚本 保持进程活着
pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
pm2 delete 0 # 杀死指定的进程
pm2 delete all # 杀死全部进程