PM2管理node.js

什么是PM2

一句话,归纳:Advanced, production process manager for Node.js
说白了,进程管理,高级的,看他怎么高级了:node

  • 内建负载均衡Clustering
  • 后台运行
  • 自动重启
  • 性能监控
  • 固然咯,还有日志!!!!

日志得强调一下,我在程序中用log4js,相信不少人用它记日志,部署在服务器后,666大多状况是没有问题的。记有一次程序内存暴涨挂了,有一次AMQP失去链接挂了,看log,什么鬼,没有错误信息??后经屡次测试证实,高并发任务处理中程序出错,可能log4js模块的异步写日志线程尚未执行,主线程已经挂掉了。。what ...?
pm2来了,log4js没有记的pm2帮你记^_^npm

安装

全局安装最新稳定版:服务器

npm install pm2@latest -g

就是这么简单,更新?pm2 update并发

项目结构

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs,日志文件夹,你会看到app-error-0.log app-out-0.log等日志,以你起的应用名称开头,输出和报错
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

经常使用这些

pm2 start app.js --name app //Fork mode 运行
pm2 start app.js -i 0 //Cluster mode 根据有效CPU数目启动最大进程数目
pm2 start app.js -i 4 //Cluster mode 启动4个实例
pm2 list //显示进程状态
pm2 monit // Monitor全部进程
pm2 logs [--raw] //显示全部的日志
pm2 flush //清空全部日志文件
pm2 stop all //中止全部进程
pm2 stop [name|id] //中止某个进程
pm2 restart all //重启全部进程
pm2 restart [name|id] //重启某个进程
pm2 reload all //0秒停机重载进程(for NETWORKED apps)
pm2 delete [name|id] //移除某个进程
pm2 delete all //移除全部进程

还有好用的

若是你想加一些参数,好比NODE_ENV --max-old-space-size...
能够这么作 pm2 start app.js --max-old-space-size=2048
每一个这么搞?好烦。。
pm2支持 Process File 一个配置文件配置你的全部服务app

Generate

pm2 ecosystem //将生成一个简单配置文件 ecosystem.config.js

Config

意思一看就明白负载均衡

module.exports = {
  /**
   * Application configuration section
   */
  apps : [
    // First application
    {
      name      : 'app_1',
      script    : '/root/project_1/app.js',
      env: {
        NODE_ENV: 'development'
      },
      env_production : {
        NODE_ENV: 'production'
      }
    },
    // Second application
    {
      name      : 'app_2',
      script    : '/root/project_2/app.js',
      instances : 4,
      exec_mode : 'cluster',
      env: {
        NODE_ENV: 'production'
      },
      env_production : {
        NODE_ENV: 'production'
      }
    },
    // Third application
    {
      name      : 'app_3',
      script    : '/root/project_3/master.js',
      env: {
        NODE_ENV: 'production'
      },
      env_production : {
        NODE_ENV: 'production'
      },
      node_args: "--nouse-idle-notification --gc_global --max-old-space-size=2048"
    }
  ]
};
//也能够用JSON

CLI

pm2 start ecosystem.config.js //启动全部的应用
pm2 start ecosystem.config.js --only app_1 //启动app_1
pm2 stop ecosystem.config.js [--only app_1] //中止
pm2 restart ecosystem.config.js [--only app_1] //重启
pm2 reload ecosystem.config.js [--only app_1] //重载
pm2 delete ecosystem.config.js [--only app_1] //移除
相关文章
相关标签/搜索