pm2和forever是啓動Nodejs服務經常使用到的兩個工具。使用這兩個指令可使node服務在後臺運行(相似於linux的nohup),另外它們能夠在服務因異常或其餘緣由被殺掉後進行自動重啓。 因爲Node的單線程特徵,自動重啓能很大程度上的提升它的健壯性。 本文不對比二者工具優劣,只是結合本身的使用,簡要介紹如何在工程部署時更好的使用pm2。node
基本指令 npm install pm2 -g : 全局安裝。 pm2 start app.js : 啓動服務,入口文件是app.js。 pm2 start app.js -i [n] --name [name] : 啓動n個進程,名字命名爲name。 npm restart [name or id] : 重啓服務。 npm reload [name or id] : 和rastart功能相同,可是能夠實現0s的無縫銜接;若是有nginx的使用經驗,能夠對比nginx reload指令。 pm2 start app.js --max_memory_restart 1024M : 當內存超過1024M時自動重啓。 若是工程中有比較棘手的內存泄露問題,這個算是一個折中方案。 pm2 monit : 對服務進行監控。linux
更多的指令能夠參考 PM2 介紹nginx
高級用法 pm2支持配置文件啓動: pm2 ecosystem: 生成配置文件ecosystem.json pm2 startOrRestart /file/path/ecosystem.json : 經過配置文件啓動服務shell
以下是我開發時ecosystem.json的內容:npm
{ /** * Application configuration section * http://pm2.keymetrics.io/docs/usage/application-declaration/ * 多個服務,依次放到apps對應的數組裏 */ apps : [ // First application { name : "nova", max_memory_restart: "300M", script : "/root/nova/app.js", out_file : "/logs/nova_out.log", error_file : "/logs/nova_error.log", instances : 4, exec_mode : "cluster", env: { NODE_ENV: "production" } } ] }
上述採用cluster模式啓動了4個服務進程;若是服務佔用的內存超過300M,會自動進行重啓。json
監控工具 pm2的監控功能是其一大特點,它提供的監控服務Keymetrics monitoring 很酷炫,感興趣的能夠配置玩一下。後端
一些思考數組
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l緩存
cat /proc/cpuinfo| grep "cpu cores"| uniq服務器
cat /proc/cpuinfo| grep "processor"| wc -l 固然能夠啓動多個端口,一個端口號對應一個服務,這樣的話就須要nignx來作負載均衡了。
反向代理,實現簡單的負載均衡: 若是有多臺服務器或者一臺服務器多個端口,能夠考慮用nginx。 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裏,能夠極大的提升服務的性能。 3. 自動化部署 經過shell腳本實現資源拉取、服務重啓、nginx緩存更新等操做,再配合pm2的監控功能,就初步達到了一個後端工程部署的標配了