美文网首页
pm2使用总结

pm2使用总结

作者: ITtian | 来源:发表于2018-10-25 14:49 被阅读65次

    node本身是一个单线程应用。它的特点就是所有的方法都是串行一次执行,并且node没有能力像java一样去创建一个新的现成去实现异步,如果在执行I/O中遇到了阻塞,就会降低整个应用的执行效率。在应用和计算能力要求日益倍增的今天,单线程最大的弊端就是无法利用多核CPU带来的优势来提升运行效率

    • pm2的主要特性
      内建负载均衡(使用node cluster集群模块,可以使用服务器上的所有cpu)
      后台运行(node app.js 这种命令是直接在前台运行的,不稳定,很容易断)
      0秒停机重载(应该是上线升级的时候 不需要停机)
      停止不稳定的进程(避免无限循环)
      控制台检测

    • 安装

    npm i pm2 -g
    
    • 用法
    pm2 start build/ecosystem.config.js --env test -i 4           #也可以把‘Max’传递给start,正确的进程数目依赖于cpu的核心数目
    pm2 start build/ecosystem.config.js --name my-api  # 命名进程,后面的参数其实都可以在config.js中定义
    pm2 deploy build/ecosystem.config.js test  # 执行deploy部署
    pm2 list                        # 显示所有进程状态
    pm2 monit                       # 监控所有进程
    pm2 logs                        # 显示所有进程日志
    pm2 log name/id                 # 显示单个进程日志(name为进程名称)
    pm2 stop all                    # 停止所有的进程
    pm2 stop name/id                # 停止指定的进程
    pm2 reload all                  # 0秒停机重载所有的进程
    pm2 reload name/id              # 0秒停机重载指定的进程
                                    # 0秒停机重载:
                                    # 这项功能允许你重新载入代码而不用失去请求连接。
    pm2 restart all                 # 重启所有的进程
    pm2 restart name/id             # 重启指定的进程
    pm2 delete all                  # 杀死所有的进程
    pm2 delete name/id              # 杀死指定的进程
    

    示例
    pm2 list


    pm2_list.png

    pm2 monit
    监视每个node进程的CPU和内存的使用情况


    pm2_monit.png
    • app.js 解析(对应的地方会有注释)
    const origin = typeof process.argv[2] != 'undefined' ? process.argv[2] : 'origin/dev';
    
    module.exports = {
      /**
       * Application configuration section
       * http://pm2.keymetrics.io/docs/usage/application-declaration/
       * start 时会根据--env 后面的参数,决定注入不同的环境变量
       * pm2 start 的时候会执行apps里面的配置
       */
      apps: [
        {
          name: '进程的名字',
          script: 'server.js',  # 注入了环境变量后,执行的脚本
          log:  '/var/log/xm.log',
          error: '/var/log/xm-err.log',
          output: '/var/log/xm-out.log',
          instances: 4,  # 实例数
          exec_mode: 'cluster',
          env: {
            COMMON_VARIABLE: 'true',
          },
          env_test: {
            NODE_ENV: 'test',
            port: 4003,
          },
          env_development: {
            NODE_ENV: 'development',
            port: 4003,
          },
          env_production: {
            NODE_ENV: 'production',
            port: 3862,
          },
        },
      ],
    
      /**
       * Deployment section
       * http://pm2.keymetrics.io/docs/usage/deployment/
       * pm2 deploy的时候会执行deploy中的配置,会使用ssh的方式去登录到服务器上
       * post-deploy 为拉取代码之后 要执行的命令,若是不设置post-deploy字段的话,执行deploy命令就只是登录到服务器上拉取对应分支的代码
       */
      deploy: {
        test: {
          user: 'root',
          host: 'x.x.x.x',
          ref: origin,
          key: 'build/key',
          repo: 'git仓库地址',
          path: '代码在服务器上的路径',
          'post-deploy': 'npm run test_build && npm run test_start', 
          env: {
            NODE_ENV: 'test',
          },
        },
      },
    };
    
    

    相关文章

      网友评论

          本文标题:pm2使用总结

          本文链接:https://www.haomeiwen.com/subject/kplqtqtx.html