濟(jì)南網(wǎng)站建設(shè)方案托管福州百度推廣排名優(yōu)化
pm2 進(jìn)程管理工具可以Windows操作系統(tǒng)上運(yùn)行,當(dāng)一臺(tái)Windows電腦上需要運(yùn)行多個(gè)進(jìn)程時(shí),或者運(yùn)維時(shí)需要運(yùn)行多個(gè)進(jìn)程以提供服務(wù)時(shí)??梢允褂胮m2,而不再是使用腳本。
1. 使用PM2管理進(jìn)程
1.1. 啟動(dòng)PM2項(xiàng)目
1.1.1. 直接啟動(dòng)項(xiàng)目
參數(shù)說明:
--watch
:監(jiān)聽?wèi)?yīng)用目錄的變化,一旦發(fā)生變化,自動(dòng)重啟。如果要精確監(jiān)聽、不見聽的目錄,最好通過配置文件。-i --instances
:啟用多少個(gè)實(shí)例,可用于負(fù)載均衡。如果-i 0
或者-i max
,則根據(jù)當(dāng)前機(jī)器核數(shù)確定實(shí)例數(shù)目。--ignore-watch
:排除監(jiān)聽的目錄/文件,可以是特定的文件名,也可以是正則。比如--ignore-watch="test node_modules "some scripts""
-n --name
:應(yīng)用的名稱。查看應(yīng)用信息的時(shí)候可以用到。-o --output <path>
:標(biāo)準(zhǔn)輸出日志文件的路徑。-e --error <path>
:錯(cuò)誤輸出日志文件的路徑。--interpreter <interpreter>
:the interpreter pm2 should use for executing app (bash, python…)。比如你用的coffee script來編寫應(yīng)用。
pm2支持直接運(yùn)行server.js啟動(dòng)項(xiàng)目,如下:
## 1.2. 查看應(yīng)用列表(查看當(dāng)前機(jī)器執(zhí)行的所有進(jìn)程)
1.2.1. 查看所有應(yīng)用的情況
pm2 list
1.2.2. 查看某一個(gè)應(yīng)用的情況
# pm2 show app_name|app_id
pm2 show 0pm2 show hbbuild_gq# pm2 describe app_name|app_id
pm2 describe 0pm2 describe hbbuild_gq
1.3. 重啟、停止、刪除
1.3.1. 重啟
# pm2 show app_name|app_id|app.ks
pm2 restart hbbuild_gq.jspm2 restart hbbuild_gqpm2 restart 0
1.3.2. 停止
#停止特定的應(yīng)用??梢韵韧ㄟ^`pm2 list`獲取應(yīng)用的名字(--name指定的)或者進(jìn)程id。pm2 stop app_name|app_id#如果要停止所有應(yīng)用,可以pm2 stop all
1.3.3. 刪除
# 刪除某一個(gè)應(yīng)用
pm2 delete app_name|app_id# 刪除所有的應(yīng)用
pm2 delete all
1.4. 日志
pm2 log 0
1.4.1 查看最新的日志
pm2 logs 0 --lines --raw # 例如: pm2 logs 0 --lines 3
1.5. 負(fù)載均衡
命令如下,表示開啟三個(gè)進(jìn)程。如果-i 0
,則會(huì)根據(jù)機(jī)器當(dāng)前核數(shù)自動(dòng)開啟盡可能多的進(jìn)程。
pm2 start hbbuild_gq.js -i 3 # 開啟三個(gè)進(jìn)程
pm2 start hbbuild_gq -i max # 根據(jù)機(jī)器CPU核數(shù),開啟對(duì)應(yīng)數(shù)目的進(jìn)程
1.6. 內(nèi)存使用超過上限自動(dòng)重啟
如果想要你的應(yīng)用,在超過使用內(nèi)存上限后自動(dòng)重啟,那么可以加上--max-memory-restart
參數(shù)。(有對(duì)應(yīng)的配置項(xiàng))
pm2 start hbbuild_gq.js --max-memory-restart 20M
1.7. 保存/凍結(jié)進(jìn)程
在重新啟動(dòng)時(shí)保存/凍結(jié)進(jìn)程列表
pm2 save
2. 總結(jié)
微服務(wù)平臺(tái),總是表現(xiàn)為多個(gè)服務(wù)多個(gè)機(jī)器分布式運(yùn)行,資源和算力拓展了,管理等復(fù)雜度提升了。
可能兩個(gè)服務(wù)登錄不同機(jī)器,查看日志還容易,當(dāng)服務(wù)到達(dá)成百上千的時(shí)候問題就很明顯。
所以,我們需要(孵化)像pm2這樣的工具,提供下面的便利:
開發(fā)和運(yùn)維上的便利
- 無縫接入服務(wù)管理
這個(gè)對(duì)NodeJS應(yīng)用來說,幾乎是神器,pm2 原生地支持了應(yīng)用程序管理,提供了命令管理查看用戶應(yīng)用。
舉Springboot開發(fā)的微服務(wù)平臺(tái)為例,開發(fā)應(yīng)用的同學(xué)需要引入SpringCloud等組件進(jìn)行服務(wù)發(fā)現(xiàn),注冊(cè)到注冊(cè)中心。本人也使用過春天全家桶來制作微服務(wù)平臺(tái),再簡(jiǎn)化還得定制一個(gè)通用SpringBoot Starter,理念也是類似的!
- 統(tǒng)一管理日志工作臺(tái)
特別是在微服務(wù)環(huán)境下,多個(gè)服務(wù),使用pm2 monit,可以很方便的一個(gè)monit工作臺(tái)切換微服務(wù)日志。大型平臺(tái)那就需要做日志搜索了,比較成百上千個(gè)服務(wù)在pm2 monit窗口切換也不現(xiàn)實(shí),這也是pm2缺少的地方!
不過,pm2還有一個(gè)在線版的Keymetics 做專業(yè)微服務(wù)平臺(tái)監(jiān)控管理的工作臺(tái)(收費(fèi))。
- 更容易的應(yīng)用彈性伸縮
上面啟動(dòng)后臺(tái)服務(wù)的時(shí)候,加了一個(gè)-i參數(shù),指定數(shù)量就能啟動(dòng)多worker服務(wù)。
雖然在NodeJS中還是單進(jìn)程多線程,但是這個(gè)參數(shù)化實(shí)例拓展,這個(gè)設(shè)計(jì)是很有指導(dǎo)意義的!
- 服務(wù)啟動(dòng)/恢復(fù)操作的封裝,原子性
我們使用pm2 start/stop appname即可,而非開發(fā)進(jìn)入多個(gè)應(yīng)用目錄手動(dòng)打node app.js。再者pm2會(huì)常駐應(yīng)用保證應(yīng)用不掉線,這個(gè)設(shè)計(jì)也是值得參考。