pm2 是一个带有负载均衡功能的Node应用的进程管理器
1.安装
npm install -g pm2
测试示例
app.js
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello World '); }).listen(2000, "127.0.0.1"); console.log('Server running at http://127.0.0.1:2000/');
2.使用
(1)启动服务
pm2 start app.js --name 'abc'
[PM2] Starting E:
odejshelloapp.js in fork_mode (1 instance)
[PM2] Done.
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 20420 │ 0s │ 0 │ online │ 0% │ 29.6mb │ Adminis… │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
请求测试服务
(2)停止服务
pm2 stop app.js
[PM2] Applying action stopProcessId on app [app.js](ids: [ 0 ])
[PM2] [abc](0) ✓
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 0 │ 0 │ 0 │ stopped │ 0% │ 0b │ Adminis… │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
(3)删除
pm2 delete id号
删除全部
pm2 delete all
(4)查看
pm2 ls
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 0 │ 0 │ 0 │ stopped │ 0% │ 0b │ Adminis… │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
(5)使用pm2内置的cluster
pm2 start app.js --name 'server1' -i 3
[PM2] Starting E:
odejs raptorifcnewapp.js in cluster_mode (3 instances)
[PM2] Done.
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 18516 │ 117s │ 0 │ online │ 0% │ 26.3mb │ Adminis… │ disabled │
│ 2 │ server1 │ default │ 1.0.0 │ cluster │ 18928 │ 0s │ 0 │ online │ 0% │ 44.6mb │ Adminis… │ disabled │
│ 3 │ server1 │ default │ 1.0.0 │ cluster │ 20120 │ 0s │ 0 │ online │ 0% │ 43.7mb │ Adminis… │ disabled │
│ 4 │ server1 │ default │ 1.0.0 │ cluster │ 15252 │ 0s │ 0 │ online │ 0% │ 39.3mb │ Adminis… │ disabled │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
注:
如果任意一个工作线程挂掉了,不用担心,PM2会立即将其重启
如果需要增加工作线程的数量,可以对集群进行扩展
pm2 scale <app name> <n>
参数<n>指定工作线程的数量
示例A.
$ pm2 scale server1 +2
[PM2] Scaling up application
[PM2] Scaling up application
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 18516 │ 7m │ 0 │ online │ 0% │ 26.0mb │ Adminis… │ disabled │
│ 2 │ server1 │ default │ 1.0.0 │ cluster │ 18928 │ 5m │ 0 │ online │ 0% │ 63.7mb │ Adminis… │ disabled │
│ 3 │ server1 │ default │ 1.0.0 │ cluster │ 20120 │ 5m │ 0 │ online │ 0% │ 62.0mb │ Adminis… │ disabled │
│ 4 │ server1 │ default │ 1.0.0 │ cluster │ 15252 │ 5m │ 0 │ online │ 0% │ 63.2mb │ Adminis… │ disabled │
│ 5 │ server1 │ default │ 1.0.0 │ cluster │ 3964 │ 0s │ 0 │ online │ 0% │ 44.3mb │ Adminis… │ disabled │
│ 6 │ server1 │ default │ 1.0.0 │ cluster │ 16996 │ 0s │ 0 │ online │ 0% │ 35.7mb │ Adminis… │ disabled │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
示例B.
$ pm2 scale server1 2
[PM2] Applying action deleteProcessId on app [2](ids: [ 2 ])
[PM2] [server1](2) ✓
[PM2] Applying action deleteProcessId on app [3](ids: [ 3 ])
[PM2] [server1](3) ✓
[PM2] Applying action deleteProcessId on app [4](ids: [ 4 ])
[PM2] [server1](4) ✓
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 18516 │ 8m │ 0 │ online │ 0% │ 25.7mb │ Adminis… │ disabled │
│ 5 │ server1 │ default │ 1.0.0 │ cluster │ 3964 │ 41s │ 0 │ online │ 0% │ 59.8mb │ Adminis… │ disabled │
│ 6 │ server1 │ default │ 1.0.0 │ cluster │ 16996 │ 41s │ 0 │ online │ 0% │ 60.3mb │ Adminis… │ disabled │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
补充:
(6)监听
当文件变化时自动重启应用
pm2 start app.js --name 'server1' -i 2 --watch
[PM2] Starting E:
odejs raptorifcnewapp.js in cluster_mode (2 instances)
[PM2] Done.
⇆ PM2+ activated | Instance Name: hkgi-PC-f914 | Dash: https://app.pm2.io/#/r/tbwhxwy4isgdc1n
┌─────┬────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├─────┼────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0 │ abc │ default │ N/A │ fork │ 19108 │ 37s │ 0 │ online │ 0% │ 26.2mb │ Adminis… │ disabled │
│ 3 │ server1 │ default │ 1.0.0 │ cluster │ 19880 │ 0s │ 0 │ online │ 9.4% │ 42.7mb │ Adminis… │ enabled │
│ 4 │ server1 │ default │ 1.0.0 │ cluster │ 20308 │ 0s │ 0 │ online │ 23.5% │ 36.8mb │ Adminis… │ enabled │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
(7)监控功能
PM2 官网提供了在线监控 Node 服务的功能,功能十分强大,该功能是付费的,普通用户只能监控一个项目
去 http://pm2.keymetrics.io/ 注册一个账号
注册之后点击登录,首次登陆可以创建一个新的 Bucket,用以监控 Node 服务
连接服务器
pm2 link Private key Public key
断开连接服务器
pm2 unlink
pm2功能很强大,先记着写吧,以后用到再补充