nodejs线上发布工具pm2的了解和使用

904 阅读2分钟
  • pm2的核心价值。

    1. 进程守护:进程奔溃了,会自动重启,接口还能继续访问
    2. 日志记录:console.log 会自动收集到out.log文件中;console.error会自动收集到err.log文件中
    3. 多进程启动:pm2可以配置多进程,使内存和多核cpu得到充分使用
  • pm2 和 nodemon的区别

    1. pm2是线上发布的工具,是后台运行,控制台的命令行还可以继续使用
    2. nodemon是本地开发的工具,前台运行,控制台的命令不能继续使用
    3. pm2有进程守护,进程奔溃了,会自动重启,接口还能继续访问;nodemon没有进程守护
  • pm2进程守护

    有无进程守护的区别:

    1. node app.js 和 nodemon app.js , 进程崩溃则不能继续访问
    2. pm2遇到进程崩溃,会自动重启 (使用 pm2 list [id] 通过查看 restart 的次数来观察重启的次数)
  • pm2常用配置

    pm2.config.json中的文件如果改动了,用restart命令重启pm2,是不生效的。需要进行以下操作:

    1. pm2 stop 0 关掉进程
    2. pm2 delete 0 删除进程
    3. npm run prd 重新读pm2.config.json,开启一个新的进程
    // pm2.config.json 文件
    //  "watch": true, -- 更改了非ignore_watch里的文件后,会自动重启
    {
      "name": "pm2-test-server",
      "script": "app.js",
      "watch": true, 
      "ignore_watch": ["node_modules", "logs"],
      "error_file": "logs/err.log",
      "out_file": "logs/out.log",
      "log_date_format": "YYYY-MM-DD HH:mm:ss"
    }
    
    // package.json中
    "scripts": {
      "dev": "cross-env NODE_ENV=dev nodemon app.js",
      "prd": "cross-env NODE_ENV=production pm2 start pm2.config.json"
    },
    
  • pm2多进程

    1. 为何要用多进程?

      背景:操作系统会限制一个进程的最大使用内存。

      内存角度:如果只有一个内存的话,无法充分利用机器的全部内存。

      cpu角度:无法充分利用多核cpu的优势。比如 4核cpu,最多可以处理4个进程。

    2. 多进程和redis

    3. 配置多进程方法:在配置中加一项 instances属性

    // pm2.config.json
    {
      "name": "pm2-test-server",
      "script": "app.js",
      "watch": false, 
      "ignore_watch": ["node_modules", "logs"],
      "instances": 4,
      "error_file": "logs/err.log",
      "out_file": "logs/out.log",
      "log_date_format": "YYYY-MM-DD HH:mm:ss"
    }
    
    // pm2 会根据哪个进程空闲了,就把请求派发到哪个进程中去