pm2

 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\n'); 
}).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:\nodejs\hello\app.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:\nodejs\traptor\ifcnew\app.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 │
└─────┴────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

补充:

node.js 的 cluster

(6)监听

当文件变化时自动重启应用

pm2 start app.js --name 'server1' -i 2 --watch

[PM2] Starting E:\nodejs\traptor\ifcnew\app.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功能很强大,先记着写吧,以后用到再补充

posted @ 2020-09-25 13:39  慕尘  阅读(660)  评论(0编辑  收藏  举报