pm2是乙個帶有負載均衡功能的node應用的程序管理器。pm2可以利用伺服器上的所有cpu,並保證程序永遠都活著,0秒的過載,部署管理多個node專案。pm2是node線上部署完美的管理工具
npm install pm2 -g : 全域性安裝。
npm restart [name or id] : 重啟服務。
npm reload [name or id] : 和rastart功能相同,但是可以實現0s的無縫銜接;如果有nginx的使用經驗,可以
對比nginx reload指令。
存洩露問題,這個算是乙個折中方案。
pm2 monit : 對服務進行監控。
複製**
至於要啟動幾個程序,可以通過伺服器的核心數進行確定,幾個核心就啟動幾個服務。指令如下:
# 檢視物理cpu個數
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l
# 檢視每個物理cpu中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 檢視邏輯cpu的個數
cat /proc/cpuinfo| grep "processor"| wc -l
複製**
當然可以啟動多個埠,乙個埠號對應乙個服務,這樣的話就需要nignx來做負載均衡了。
開發環境中多以fork的方式啟動,生產環境中多用cluster方式啟動
上面的示例圖中可以看一「watching」一項,這個項預設是disabled,可以通過如下命令開啟
複製**
建議:這個適合在開發時用,可以省不少時間,生產環境下最好不要用
1、cluster是fork的派生,cluster支援所有cluster擁有的特性;
2、fork不支援socket位址埠復用,cluster支援位址埠復用。因為只有node的cluster模組支援socket選項so_reuseaddr;
fork模式可以應用於其他語言,如php,python,perl,ruby,bash,coffee, 而cluster只能應用於node;
fork不支援定時重啟,cluster支援定時重啟。定時重啟也就是配置中的cron_restart配置項。
pm2的監控有兩種方式:
pm2 monit是專門用來監控的命令,監控項包括cpu與記憶體,缺點monit展示內容太過粗糙,不夠詳細
可以檢視出每個程序的執行狀態。
如果需要更詳細的監控內容,對於cli而言一般都是可以實現的。
這種監控方式的缺點:
1、不夠直觀,需要自己去執行命令並分析結果;
2、不便於多台伺服器的應用監控管理;
1、 pm2自身的日誌,存放於$home/.pm2/pm2.log
;
這裡之所以把日誌單獨說明一下是因為,如果程式開發不嚴謹,為了除錯程式,導致應用產生大量標準輸出,使伺服器本身記錄大量的日誌,導致服務磁碟滿載問題。一般而言,pm2管理的應用本身都有自己日誌系統,所以對於這種不必要的輸出內容需禁用日誌,重定向到/dev/null
。
與crontab比較,也有類似情況,crontab自身日誌,與其管理的應用本身的輸出。應用指令碼輸出一定需要重定向到/dev/null,因為該輸出內容會以郵件的形式傳送給使用者,內容儲存在郵件檔案,會產生意向不到的結果,或會導致指令碼壓根不被執行。
pm2支援配置檔案啟動:
pm2 pm2
: 生成配置檔案ecosystem.json
pm2 startorrestart /file/path/pm2.json
: 通過配置檔案啟動服務
如下是開發時pm2.json的內容
]}複製**
上述採用cluster模式啟動了6個服務程序;如果服務占用的記憶體超過300m,會自動進行重啟。
配置項
name 應用程序名稱;
script 啟動指令碼路徑;
cwd 應用啟動的路徑,關於script與cwd的區別舉例說明:在/home/polo/目錄下執行/data/release/node/
index.js,此處script為/data/release/node/index.js,cwd為/home/polo/;
args 傳遞給指令碼的引數;
interpreter 指定的指令碼直譯器;
interpreter_args 傳遞給直譯器的引數;
instances 應用啟動例項個數,僅在cluster模式有效,預設為fork;
exec_mode 應用啟動模式,支援fork和cluster模式;
watch 監聽重啟,啟用情況下,資料夾或子資料夾下變化應用自動重啟;
ignore_watch 忽略監聽的資料夾,支援正規表示式;
max_memory_restart 最大記憶體限制數,超出自動重啟;
env 環境變數,object型別,如;
log_date_format 指定日誌日期格式,如yyyy-mm-dd hh:mm:ss;
error_file 記錄標準錯誤流,$home/.pm2/logs/***err.log),**錯誤可在此檔案查詢;
out_file 記錄標準輸出流,$home/.pm2/logs/***out.log),如應用列印大量的標準輸出,會導致pm2日誌過大;
min_uptime 應用執行少於時間被認為是異常啟動;
max_restarts 最大異常重啟次數,即小於min_uptime執行時間重啟次數;
autorestart 預設為true, 發生異常的情況下自動重啟;
cron_restart crontab時間格式重啟應用,目前只支援cluster模式;
force 預設false,如果true,可以重複啟動乙個指令碼。pm2不建議這麼做;
restart_delay 異常重啟情況下,延時重啟時間;
複製**
pm2是一款非常優秀的node程序管理工具,它有著豐富的特性:能夠充分利用多核cpu且能夠負載均衡、能夠幫助應用在崩潰後、指定時間(cluster model)和超出最大記憶體限制等情況下實現自動重啟。
個人幾點看法保證常駐應用程序穩定執行:
1、定時重啟,應用程序執行時間久了或許總會產生一些意料之外的問題,定時可以規避一些不可測的情況;
2、最大記憶體限制,根據觀察設定合理記憶體限制,保證應用異常執行;
3、合理min_uptime,min_uptime是應用正常啟動的最小持續執行時長,超出此時間則被判定為異常啟動;
4、設定異常重啟延時restart_delay,對於異常情況導致應用停止,設定異常重啟延遲可防止應用在不可測情況下不斷重啟的導致重啟次數過多等問題;
5、設定異常重啟次數,如果應用不斷異常重啟,並超過一定的限制次數,說明此時的環境長時間處於不可控狀態,伺服器異常。此時便可停止嘗試,發出錯誤警告通知等。
關於pm2的使用,主要還是運用於常駐指令碼。
離線安裝PM2
因為要部署應用的機器沒有公網連線,所以直接npm install pm2是不可能了,簡單記錄一下怎麼離線安裝pm2 執行 npm install pm2 g 安裝pm2 執行 npm config get prefix,看一下這台機器的npm預設全域性安裝目錄在哪,然後去這個目錄下面的 lib no...
pm2使用總結
npm install pm2 g 安裝 pm2 version 版本 pm2 start index.js 啟動 pm2 list 檢視程序列表 scripts pm2遇到程序崩潰,會自動重啟 配置檔案 通過配置檔案啟動 pm2 start pm2.conf.jsonpm2 install pm2...
pm2命令總結
1 pm2需要全域性安裝 npm install g pm2 4 新增程序 應用 watch pm2 start bin www watch 5 結束程序 應用 pm2 stop www 檔名,操作多個 id 定時任務id,單個操作 6 結束所有程序 應用 pm2 stop all 7 刪除程序 應...