一句話,歸納:Advanced, production process manager for Node.js
說白了,進程管理,高級的,看他怎麼高級了:node
日誌得強調一下,我在程序中用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 Configurationpm2 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
pm2 ecosystem //將生成一個簡單配置文件 ecosystem.config.js
意思一看就明白負載均衡
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
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] //移除