pm2到底是什么呢?你真的了解嗎

一、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

pm2部署可參考:https://www.cnblogs.com/zhenfeng95/p/12853806.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容