因為近年來空污問題日漸嚴重
尤其當人聽聞PM2.5這詞往往聞之色變
所以不知會不會有人看到PM2
以為是不是又有一種2微米(μm)以下之粒狀污染物出現…
在此只是為博君一笑
開一個冷冷的場子(氣溫最近屢屢創新高好像滿需要的)
言歸正傳,今天是要介紹一個守護進程的好用工具(PM2)
當初是在開發NodeJS的時候知悉
只不過因為當初想快速一點將產品上線測試
於是就先選擇非常陽春的守護進程的工具–forever
由於最近要上到生產環境
為了系統的健壯 日誌的規劃 監控 效能的提升
當然要選用PM2摟
使用過後真的建議大家快快換掉forever吧~

以下比較一下兩者的差異

FeatureForeverPM2
Keep Alive
Log aggregation
API
Terminal monitoring
Using other language
Zero downtime
JSON configuration

從以上可以看到差異不是普通大
以下介紹幾個我推薦一定要用的功能
如何安裝PM2在此較不介紹了


FIRST 日誌的自動管理規劃

當初在使用forever時就發現log管理的問題
必須使用logrotate去管理
但是本人有沒有root權限根本不能修改conf
還要聯絡管理人員幫忙
求人不如求己
只要使用pm2-logrotate這個Module就一切搞定
執行一下以下指令吧

$ pm2 install pm2-logrotate  

安裝完後Default就會每天自動切割log
並且超過10MB也會切割
只保留30天的log
當然你也可以去設定不過一般來說預設就滿好用的


SECOND 進程監控

在監控方面只要簡單輸入

$ pm2 monit  

你將會發現如下圖的監控畫面

是不是強大呢~當然還可以結合Keymetrics這個web介面方便監控
但是後來實際用發現pm2-server-monit這個module竟然有bug
雖在gitHub上說已修復
但實際將開發branch拿來用還是失敗XD…
並且六月就修復了到現在那PR都還沒merge
可見活耀度不是很高
所以我不太推薦大家使用這module且付費版費用不低啊


THIRD 效能提升

大家應該很清楚NodeJS是single thread去執行的
所以若是能針對主機的核心數來開clusting來做到負載平行
那效率一定會大大提升
要實現也非常簡單

STEP1
先在你的啟動app.js加上

var cluster = require('cluster');
var cpuCount = require('os').cpus().length;

if (cluster.isMaster) {
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }
}else{...}

STEP2
再啟動PM2即可

$ pm2 start app.js -i 0  

0這參數表示會根據你的核心數來開node數


最後附帶一提
為何不提前面所說的PM2是如何讓程序壯健
是因為當你啟動時他就會監聽程序
若程序死掉他就會自動把他叫起來
功能就跟forever一樣喔~
不過我推薦在啟動程序時可以用pm2 update app.js
這樣可以做到zero downtime喔~