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] //移除
相關文章
相關標籤/搜索