一、PM2 简介

1)PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。

2)PM2的运行需要Node 环境和Npm的支持

二、PM2 环境安装与使用

2.2、安装

[root@node local]# npm install -g pm2

2.3、常用命令

#从svn拉取测试代码
[root@node ~]# svn checkout svn://admin@xx.xx.xx.xx/dc_h5_20180606/dc_h5
[root@node ~]# ll
drwxr-xr-x  14 root root      4096 Dec  6 14:12 dc_h5

#生成module
[root@node dc_h5]# npm install
[root@node dc_h5]# npm run build

#启动
[root@node dc_h5]# pm2 start pm2.config.json --env 83
[PM2][WARN] Applications dc_h5 not running, starting...
[PM2] App [dc_h5] launched (2 instances)
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ dc_h5  │ default2.4.3   │ cluster │ 1252350s     │ 0    │ online    │ 0%       │ 20.9mb   │ root     │ disabled │
│ 1   │ dc_h5  │ default2.4.3   │ cluster │ 1252420s     │ 0    │ online    │ 0%       │ 17.1mb   │ root     │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
[root@node dc_h5]# pm2 status
┌─────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name   │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ dc_h5  │ default2.4.3   │ cluster │ 12523522s    │ 0    │ online    │ 0%       │ 90.1mb   │ root     │ disabled │
│ 1   │ dc_h5  │ default2.4.3   │ cluster │ 12524222s    │ 0    │ online    │ 0%       │ 87.6mb   │ root     │ disabled │
└─────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

其他常用命令:

pm2 list              #查看所用已启动项目
pm2 restart XXX       #重启
pm2 stop XXX          #停止
pm2 delete XXX        #删除
pm2 monit             #监视每个node进程的CPU和内存的使用情况
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        #杀死全部进程

运行进程的不同方式:
pm2 start app.js -i max  #根据有效CPU数目启动最大进程数目
pm2 start app.js -i 3    #启动3个进程
pm2 start app.js -x      #用fork模式启动 app.js 而不是使用 cluster
pm2 start app.js -x -- -a 23  #用fork模式启动 app.js 并且传递参数 (-a 23)
pm2 start app.js --name serverone #启动一个进程并把它命名为 serverone
pm2 stop serverone    #停止 serverone 进程
pm2 start app.json      #启动进程, 在 app.json里设置选项
pm2 start app.js -i max -- -a 23   #在--之后给 app.js 传递参数
pm2 start app.js -i max -e err.log -o out.log  #启动并生成一个配置文件

配置文件示例(实际使用自行删除)

ecosystem.config.js

module.exports = {
    apps : [{
        name      : 'API',      //应用名
        script    : 'app.js',   //应用文件位置
        env: {
            PM2_SERVE_PATH: ".",    //静态服务路径
            PM2_SERVE_PORT: 8080,   //静态服务器访问端口
            NODE_ENV: 'development' //启动默认模式
        },
        env_production : {
            NODE_ENV: 'production'  //使用production模式 pm2 start ecosystem.config.js --env production
        },
        instances: "max",          //将应用程序分布在所有CPU核心上,可以是整数或负数
        watch:true,               //监听模式
        output: './out.log',      //指定日志标准输出文件及位置
        error: './error.log',     //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分
        merge_logs: true,         //集群情况下,可以合并日志
        log_type:"json",          //日志类型
        log_date_format: "DD-MM-YYYY",  //日志日期记录格式
    }],
    deploy : {
        production : {
            user : 'node',                      //ssh 用户
            host : '212.83.163.1',              //ssh 地址
            ref  : 'origin/master',             //GIT远程/分支
            repo : 'git@github.com:repo.git',   //git地址
            path : '/var/www/production',       //服务器文件路径
            post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production'  //部署后的动作
        }
    }
};

示例

module.exports = {
    apps: [
        {
            name: 'jeebiz_admin',
            script: '/usr/bin/java',
            args: [
                "-jar",
                "-Xmn512M",
                "-Xms1024M",
                "-Xmx1024M",
                "-Dspring.profiles.active=test",
                "target/jeebiz-admin-1.0.0-SNAPSHOT.jar"
            ],
            instances: 1,
            autorestart: true,
            watch: false
        }
    ]
};
作者:Jeebiz  创建时间:2021-05-28 10:00
 更新时间:2023-12-28 09:15