PM2

参考:https://mp.weixin.qq.com/s/S8Gw2XzuflnN2QMSVXhLhg

场景

  • node 应用跑的时候突然抛了个错,崩溃了,是不是需要重新跑起来?这时候是不是就需要另一个进程来自动做重启这件事情?
  • node 应用的日志默认输出在控制台,如果想输出到不同的日志文件,是不是可以让另一个进程获取 node 应用的输出,然后写文件来实现?
  • node 是单线程的,而机器是多个 cpu 的,为了充分利用 cpu 的能力,我们会用多个进程来跑 node 应用,来提高性能。这种通用逻辑是不是也可以放到一个单独进程里来实现?
  • node 运行时的 cpu、内存等资源的占用,是不是需要监控?这时候是不是可以让另一个进程来做?

线上的 node 应用不只是跑起来就行了,还要做自动重启、日志、多进程、监控这些事情。

简介

pm2 是 process manager,进程管理,它是第二个大版本,和前一个版本差异很大,所以叫 pm2.

pm2 的主要功能就是进程管理、日志管理、负载均衡、性能监控这些。

安装

npm install -g pm2

基本命令

pm2 start main.js   pm2 start <pid>
pm2 stop main.js

pm2 logs
pm2 log <pid>

PM2 start 参数

-i num 就是启动 num 个进程做负载均衡

pm2 start app.js -i max 根据CPU核数启动进程的个数

动态调整进程数

pm2 scale main 3 把集群调整为 3 个进程

pm2 scale main +3 把集群增加3 个进程

性能监控

可以看到不同进程的 cpu 和内存占用情况

pm2 monit

PM2配置文件

PM2管理前端

配置文件:

{
    "apps": [
        {
            "script": "serve",
            "name": "chilinnew",
            "namespace": "szkj",
            "env": {
                "PM2_SERVE_PATH": "./dist",
                "PM2_SERVE_PORT": 8080
            }
        }
    ]
}

PM2管理后端

配置文件:

# midway 框架
{
    "apps": [
        {
            "name": "sjcl-master",
            "namespace": "szkj",
            "script": "./bootstrap.js",
            "error_file": "~/logs/sjcl-master/err.log",
            "out_file": "~/logs/sjcl-master/out.log",
            "merge_logs": true,
            "env": {
                "NODE_ENV": "production",
                "MIDWAY_SERVER_ENV": "production"
            }
        }
    ]
}

# nestJS