为什么要使用pm2
- 崩溃自动重启
- 监控
pm2是什么
PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.
安装
1 | npm install pm2 -g |
更新pm2
1 | Install latest pm2 version |
最简单的打开姿势
启动
1
pm2 start app.js -i 4 --name="app" #启动应用,4个cluster(一个master,三个slave),名字是api
查看
1
pm2 list
监控
1
pm2 monit
关联keymetrics(非常简单)
- 注册keymetrics帐号
- 注册成功之后,可以看见一个
new bucket
按钮,点击创建 - 拿到pubkey和secretkey
- 一行命令关联:
pm2 link secretkey publickey [machine name]
, 然后就可以在keymetrics的dashboard中看到你的应用了 - 万臣之后应该可以看到下图所示的图形化监控界面
结合docker
在项目根目录下新建
process.yml
文件1
2
3
4
5
6
7
8
9
10
11
12apps:
- script : ./api.js
name : 'api-app'
instances: 4
exec_mode: cluster
- script : ./worker.js
name : 'worker'
watch : true
env :
NODE_ENV: development
env_production:
NODE_ENV: production项目启动
1
2
3
4
5docker run -p 80:3000 -v `pwd`/example_app:/app keymetrics/pm2-docker-alpine
# 关联keymetrics图形化监控界面,还需要添加以下环境变量
-e "KEYMETRICS_SECRET=YYY
-e "KEYMETRICS_PUBLIC=XXX"
-e "INSTANCE_NAME=hostname"
注意
启动之后,我这里使用的时候,发现keymetrics的监控并不稳定,目前还不确定是什么问题
总结
这个方案还存在一些问题,例如
- keymetrics的免费服务还是有点捉鸡的,感觉最重要功能就是内存和CPU占用信息的展示,还有很多功能都需要付费,比如日志
docker stats
可以直接查看整个container的内存和CPU占用的情况,如果部署环境给予docker
的话,感觉这个数据比node进程内存CPU的占用更有参考价值keymetrics/pm2-docker-alpine
,这个镜像在dockerhub上的star只有3(其中还有一个是我),pull
只有100多,这个数量充分显示了,大家都没有用这个东西在做监控(也可能使用了别的image
)
不过,就算这个方案再烂,在没有其他进程监控方案的时候,还是可以试一试的,毕竟,有总比没有好,而且使用这个方案基本不需要费什么力气