一嗤栓、PM2是什么
- pm2是可以用于生產(chǎn)環(huán)境的Nodejs的進程管理工具,并且它內(nèi)置一個負載均衡叨叙。它不僅可以保證服務(wù)不會中斷一直在線堪澎,并且提供0秒reload功能,還有其他一系列進程管理樱蛤、監(jiān)控功能。并且使用起來非常簡單行楞。
- 嗯嗯,最好的用處就是監(jiān)控我們的生產(chǎn)環(huán)境下的node程序運行狀態(tài)子房,讓它給我們?nèi)找岳^日的處于工作狀態(tài)就轧。
- pm2官方文檔
二、為什么要使用pm2
- 原始社會的我們開發(fā)node服務(wù)端程序一般過程:
- 編寫好node程序app.js解愤,運行node app.js;或者寫入script使用npm運行;打開瀏覽器訪問送讲;
- 好像需要修改內(nèi)容惋啃,瀏覽器對修改的內(nèi)容沒有顯示出來?->node app.js->再次運行边灭;
- 瀏覽器忽然訪問不到服務(wù),好像出錯啦绒瘦?重啟下->node app.js->再次運行称簿;
- 哎呀開了好多控制臺窗口扣癣,一不小心關(guān)閉了,服務(wù)又訪問不到了憨降,繼續(xù)打開控制臺->node app.js->再次運行父虑;
- 好崩潰!好像有個工具nodemon授药;安裝使用nodemon app.js;哇频轿,可以自動監(jiān)聽文件修改變化自動重啟,但是關(guān)閉控制臺服務(wù)還是會被摧毀烁焙。
- 通過這個很常用的場景航邢,我們了解到要避免這些麻煩一個服務(wù)器至少需要有:后臺運行和自動重啟,這兩個能力骄蝇。
- 再來看看使用pm2可擁有的能力:
- 日志管理膳殷;兩種日志,pm2系統(tǒng)日志與管理的進程日志九火,默認會把進程的控制臺輸出記錄到日志中岔激;
- 負載均衡:PM2可以通過創(chuàng)建共享同一服務(wù)器端口的多個子進程來擴展您的應(yīng)用程序虑鼎。這樣做還允許以零秒停機時間重新啟動應(yīng)用程序炫彩。
- 終端監(jiān)控:可以在終端中監(jiān)控應(yīng)用程序并檢查應(yīng)用程序運行狀況(CPU使用率江兢,使用的內(nèi)存,請求/分鐘等)邑贴。
- SSH部署:自動部署拢驾,避免逐個在所有服務(wù)器中進行ssh独旷。
- 靜態(tài)服務(wù):支持靜態(tài)服務(wù)器功能
- 支持開發(fā)調(diào)試模式寥裂,非后臺運行封恰,pm2-dev start <appName>诺舔;
- 。许昨。糕档。速那。端仰。太過強大荔烧!
三茴晋、pm2常用命令
啟動服務(wù)pm2 start <script_file|config_file> [options]
啟動指定應(yīng)用
1. 啟動一個node程序
pm2 start app.js //啟動app.js應(yīng)用
2. 啟動進程并指定應(yīng)用的程序名
pm2 start app.js --name 程序名 //啟動應(yīng)用并設(shè)置name
3. 添加進程監(jiān)視
監(jiān)聽模式啟動诺擅,當(dāng)文件發(fā)生變化烁涌,自動重啟
pm2 start app.js --name 程序名 --watch(指定程序名的情況下)
pm2 start app.js --watch (未指定程序名的情況下)
4. 列出所有進程
pm2 list
pm2 ls // 簡寫
5. 從進程列表中刪除進程
pm2 delete [appname] | id
pm2 delete app // 指定進程名刪除
pm2 delete 0 // 指定進程id刪除
如果修改了應(yīng)用配置行為,需要先刪除應(yīng)用舷丹,重新啟動后方才會生效,如修改腳本入口文件仗扬;
6. 刪除進程列表中所有進程
pm2 delete all(關(guān)閉并刪除應(yīng)用)
7. 查看某個進程具體情況
pm2 describe app
8. 查看進程的資源消耗情況
pm2 monit( 監(jiān)控各個應(yīng)用進程cpu和memory使用情況)
9. 重啟進程
pm2 restart app.js //同時殺死并重啟所有進程早芭,短時間內(nèi)服務(wù)不可用,生成環(huán)境慎用
pm2 restart all // 重啟所有進程
pm2 reload app.js //重新啟動所有進程退个,0秒重啟语盈,始終保持至少一個進程在運行
pm2 gracefulReload all //以群集模式重新加載所有應(yīng)用程序
10. 查看進程日志
pm2 logs [Name] //根據(jù)指定應(yīng)用名查看應(yīng)用日志
pm2 logs [ID] //根據(jù)指定應(yīng)用ID查看應(yīng)用日志
pm2 logs all // 查看所有進程的日志
11. 顯示應(yīng)用程序詳細信息pm2 show <appName> [options] 顯示指定應(yīng)用詳情
pm2 show [Name] //根據(jù)name查看
pm2 show [ID] //根據(jù)id查看
12. 停止指定應(yīng)用pm2 stop <appName> [options] 停止指定應(yīng)用
pm2 stop all //停止所有應(yīng)用
pm2 stop [AppName] //根據(jù)應(yīng)用名停止指定應(yīng)用
pm2 stop [ID] //根據(jù)應(yīng)用id停止指定應(yīng)用
13. 殺掉pm2管理的所有進程
pm2 kill
14. 啟動靜態(tài)服務(wù)器,將目錄dist作為靜態(tài)服務(wù)器根目錄黎烈,端口為8080
pm2 serve ./dist 8080
15. 集群模式啟動
-i 表示 number-instances 實例數(shù)量
max 表示 PM2將自動檢測可用CPU的數(shù)量 可以自己指定數(shù)量
pm2 start app.js -i max //啟用群集模式(自動負載均衡)
16.開發(fā)模式啟動,即不啟用后臺運行
pm2-dev start ...
17. 設(shè)置pm2開機自啟
開啟啟動設(shè)置武翎,此處是CentOS系統(tǒng)符隙,其他系統(tǒng)替換最后一個選項(可選項:ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)
pm2 startup centos
然后按照提示需要輸入的命令進行輸入
最后保存設(shè)置
pm2 save