一、PM2是什么
- pm2是可以用于生產(chǎn)環(huán)境的Nodejs的進(jìn)程管理工具,并且它內(nèi)置一個(gè)負(fù)載均衡。它不僅可以保證服務(wù)不會(huì)中斷一直在線,并且提供0秒reload功能,還有其他一系列進(jìn)程管理、監(jiān)控功能。并且使用起來非常簡(jiǎn)單。
- 嗯嗯,最好的用處就是監(jiān)控我們的生產(chǎn)環(huán)境下的node程序運(yùn)行狀態(tài),讓它給我們?nèi)找岳^日的處于工作狀態(tài)。
- pm2官方文檔
二、為什么要使用pm2
- 原始社會(huì)的我們開發(fā)node服務(wù)端程序一般過程:
- 編寫好node程序app.js,運(yùn)行node app.js;或者寫入script使用npm運(yùn)行;打開瀏覽器訪問;
- 好像需要修改內(nèi)容,瀏覽器對(duì)修改的內(nèi)容沒有顯示出來?->node app.js->再次運(yùn)行;
- 瀏覽器忽然訪問不到服務(wù),好像出錯(cuò)啦?重啟下->node app.js->再次運(yùn)行;
- 哎呀開了好多控制臺(tái)窗口,一不小心關(guān)閉了,服務(wù)又訪問不到了,繼續(xù)打開控制臺(tái)->node app.js->再次運(yùn)行;
- 好崩潰!好像有個(gè)工具nodemon;安裝使用nodemon app.js;哇,可以自動(dòng)監(jiān)聽文件修改變化自動(dòng)重啟,但是關(guān)閉控制臺(tái)服務(wù)還是會(huì)被摧毀。
- 通過這個(gè)很常用的場(chǎng)景,我們了解到要避免這些麻煩一個(gè)服務(wù)器至少需要有:后臺(tái)運(yùn)行和自動(dòng)重啟,這兩個(gè)能力。
- 再來看看使用pm2可擁有的能力:
- 日志管理;兩種日志,pm2系統(tǒng)日志與管理的進(jìn)程日志,默認(rèn)會(huì)把進(jìn)程的控制臺(tái)輸出記錄到日志中;
- 負(fù)載均衡:PM2可以通過創(chuàng)建共享同一服務(wù)器端口的多個(gè)子進(jìn)程來擴(kuò)展您的應(yīng)用程序。這樣做還允許以零秒停機(jī)時(shí)間重新啟動(dòng)應(yīng)用程序。
- 終端監(jiān)控:可以在終端中監(jiān)控應(yīng)用程序并檢查應(yīng)用程序運(yùn)行狀況(CPU使用率,使用的內(nèi)存,請(qǐng)求/分鐘等)。
- SSH部署:自動(dòng)部署,避免逐個(gè)在所有服務(wù)器中進(jìn)行ssh。
- 靜態(tài)服務(wù):支持靜態(tài)服務(wù)器功能
- 支持開發(fā)調(diào)試模式,非后臺(tái)運(yùn)行,pm2-dev start <appName>;
- 。。。。。太過強(qiáng)大!
三、pm2常用命令
啟動(dòng)服務(wù)pm2 start <script_file|config_file> [options]啟動(dòng)指定應(yīng)用
1. 啟動(dòng)一個(gè)node程序
pm2 start app.js //啟動(dòng)app.js應(yīng)用
2. 啟動(dòng)進(jìn)程并指定應(yīng)用的程序名
pm2 start app.js --name 程序名 //啟動(dòng)應(yīng)用并設(shè)置name
3. 添加進(jìn)程監(jiān)視
監(jiān)聽模式啟動(dòng),當(dāng)文件發(fā)生變化,自動(dòng)重啟
pm2 start app.js --name 程序名 --watch(指定程序名的情況下)
pm2 start app.js --watch (未指定程序名的情況下)
4. 列出所有進(jìn)程
pm2 list
pm2 ls // 簡(jiǎn)寫
5. 從進(jìn)程列表中刪除進(jìn)程
pm2 delete [appname] | id
pm2 delete app // 指定進(jìn)程名刪除
pm2 delete 0 // 指定進(jìn)程id刪除
如果修改了應(yīng)用配置行為,需要先刪除應(yīng)用,重新啟動(dòng)后方才會(huì)生效,如修改腳本入口文件;
6. 刪除進(jìn)程列表中所有進(jìn)程
pm2 delete all(關(guān)閉并刪除應(yīng)用)
7. 查看某個(gè)進(jìn)程具體情況
pm2 describe app
8. 查看進(jìn)程的資源消耗情況
pm2 monit( 監(jiān)控各個(gè)應(yīng)用進(jìn)程cpu和memory使用情況)
9. 重啟進(jìn)程
pm2 restart app.js //同時(shí)殺死并重啟所有進(jìn)程,短時(shí)間內(nèi)服務(wù)不可用,生成環(huán)境慎用
pm2 restart all // 重啟所有進(jìn)程
pm2 reload app.js //重新啟動(dòng)所有進(jìn)程,0秒重啟,始終保持至少一個(gè)進(jìn)程在運(yùn)行
pm2 gracefulReload all //以群集模式重新加載所有應(yīng)用程序
10. 查看進(jìn)程日志
pm2 logs [Name] //根據(jù)指定應(yīng)用名查看應(yīng)用日志
pm2 logs [ID] //根據(jù)指定應(yīng)用ID查看應(yīng)用日志
pm2 logs all // 查看所有進(jìn)程的日志
11. 顯示應(yīng)用程序詳細(xì)信息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管理的所有進(jìn)程
pm2 kill
14. 啟動(dòng)靜態(tài)服務(wù)器,將目錄dist作為靜態(tài)服務(wù)器根目錄,端口為8080
pm2 serve ./dist 8080
15. 集群模式啟動(dòng)
-i 表示 number-instances 實(shí)例數(shù)量
max 表示 PM2將自動(dòng)檢測(cè)可用CPU的數(shù)量 可以自己指定數(shù)量
pm2 start app.js -i max //啟用群集模式(自動(dòng)負(fù)載均衡)
16.開發(fā)模式啟動(dòng),即不啟用后臺(tái)運(yùn)行
pm2-dev start ...
17. 設(shè)置pm2開機(jī)自啟
開啟啟動(dòng)設(shè)置,此處是CentOS系統(tǒng),其他系統(tǒng)替換最后一個(gè)選項(xiàng)(可選項(xiàng):ubuntu, centos, redhat, gentoo, systemd, darwin, amazon)
pm2 startup centos
然后按照提示需要輸入的命令進(jìn)行輸入
最后保存設(shè)置
pm2 save