欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用pm2運行node應(yīng)用的流程步驟

 更新時間:2024年03月15日 08:36:42   作者:云牧  
PM2是一個功能強大的進程管理工具,專為?Node.js?應(yīng)用設(shè)計,它提供了進程管理、日志管理、負載均衡和性能監(jiān)控等功能,幫助開發(fā)者輕松應(yīng)對生產(chǎn)環(huán)境中的各種挑戰(zhàn),本文給大家介紹了使用pm2?運行node應(yīng)用的流程步驟,需要的朋友可以參考下

為什么使用 pm2

在生產(chǎn)環(huán)境中運行 Node.js 應(yīng)用時,我們面臨著一系列挑戰(zhàn):如何確保應(yīng)用崩潰后能夠自動重啟?如何將應(yīng)用的日志輸出到指定文件以便分析?如何充分利用多核CPU來提升應(yīng)用性能?以及如何監(jiān)控應(yīng)用的資源占用情況?這些問題都可以通過PM2(Process Manager 2)來解決。
PM2是一個功能強大的進程管理工具,專為 Node.js 應(yīng)用設(shè)計。
它提供了進程管理、日志管理、負載均衡和性能監(jiān)控等功能,幫助開發(fā)者輕松應(yīng)對生產(chǎn)環(huán)境中的各種挑戰(zhàn)。

啟動 pm2

首先安裝 pm2:

npm install pm2 -g

跑一個 node 應(yīng)用,這里跑 Nest 應(yīng)用:

nest new pm2-test -p npm
cd pm2-test
pnpm build
pm2 start ./dist/main.js

這個 node 已經(jīng)運行并且被 pm2 管理起來了。

可以使用 pm2 start 跑多個進程。

pm2 日志管理

查看下日志:

pm2 logs

pm2 會把所有進程的日志打印出來,通過前面的 “進程id|進程名字” 來區(qū)分,比如 0|main。

所有的進程會寫到日志文件中去,在 ~/.pm2/logs 下,以 “進程名-out.log”“進程名-error.log” 分別保存不同進程的日志:

比如 main-out.log 里保存了 main 進程的正常日志,而 main-error.log 里保存了它的報錯日志。
可通過 cat ~/.pm2/logs/main-out.log 查看。
查看單個進程的日志:

pm2 logs 進程名
pm2 logs 進程id

日志清空,使用 pm2 flush 或者 pm2 flush 進程名|id查看 main 進程的前 100 行日志:pm2 logs main --lines 100

pm2 進程管理

PM2提供了豐富的進程管理功能,包括啟動、重啟、停止和刪除進程等。
只需要執(zhí)行 pm2 start 的時候帶上幾個選項就好了:
超過 100M 內(nèi)存自動重啟:

pm2 start app.js --max-memory-restart 100M

支持 corn 表達式,每天午夜(00:00)重啟:

pm2 start app.js --cron-restart="0 0 * * *"

當文件內(nèi)容改變自動重啟:

pm2 start app.js --watch

不自動重啟:

pm2 start app.js --no-autorestart

pm2 負載均衡

再就是負載均衡,node 應(yīng)用是單進程的,而為了充分利用多核 cpu,我們會使用多進程來提高性能。
node 提供的 cluster 模塊就是做這個的,pm2 就是基于這個實現(xiàn)了負載均衡。
我們只要啟動進程的時候加上 -i num 就是啟動 num 個進程做負載均衡的意思:

pm2 start app.js -i max 
pm2 start app.js -i 0

-i max 讓 PM2 自動設(shè)置進程數(shù)為最大值。
-i 0 則讓 PM2 自動根據(jù) CPU 核心數(shù)動態(tài)設(shè)置進程數(shù)。
用多進程的方式跑 nest 應(yīng)用:

可以看到啟動了 8 個進程,因為我是 8 核 cpu。

跑起來之后,還可以動態(tài)調(diào)整進程數(shù),通過 pm2 scale:

pm2 scale main 1

此時 main 的集群調(diào)整為 1 個進程。

我們同樣可以添加進程數(shù):

pm2 scale main +3

現(xiàn)在變成 4 個進程了,通過這些方式可以動態(tài)伸縮進程的數(shù)量,pm2 會把請求分配到不同進程上去。這就是負載均衡功能。

我們同樣可以停止和刪除所有 pm2 的進程:

pm2 stop all
pm2 delete all

還可以停止刪除單個進程:

pm2 stop app_name_or_id
pm2 delete app_name_or_id

app_name_or_id 替換為應(yīng)用程序名稱或者 PM2 分配給應(yīng)用程序的 ID
可以通過 pm2 list 命令查看所有 PM2 管理的應(yīng)用程序及其狀態(tài)。

pm2 監(jiān)控

性能監(jiān)控功能,執(zhí)行 pm2 monit:

pm2 monit

這里可以看到不同進程的 cpu 和內(nèi)存占用情況。

當進程多了之后,難道都要手動通過命令行來啟動么?
pm2 支持配置文件的方式啟動多個應(yīng)用。執(zhí)行 pm2 ecosystem,會創(chuàng)建一個配置文件:

pm2 ecosystem

我們就可以把啟動的選項保存在這個配置文件,pm2 根據(jù)配置文件自動執(zhí)行這些命令。
然后用 pm2 start ecosystem.config.js 就可以批量跑一批應(yīng)用。

pm2 網(wǎng)站

訪問 pm2 的網(wǎng)站,登錄,創(chuàng)建 bucket:

然后執(zhí)行下面 pm2 link xxx:

再執(zhí)行 pm2 plus 就會打開 bucket 對應(yīng)的網(wǎng)頁,在線監(jiān)控本地的應(yīng)用。

docker 結(jié)合 pm2

一般都是 docker 鏡像內(nèi)安裝 pm2 來跑 node 應(yīng)用:
之前我們寫的 Nest 的 dockerfile 需要更改一下:

pm2-runtime 代表 node 命令跑應(yīng)用。

打包鏡像:

docker build -t nest-pm2-test:v1.0 .

運行鏡像:

docker run -p 3000:3000 -d nest-pm2-test:v1.0

可以在 docker 看到 pm2 打印的日志。在 terminal 使用 pm2 的命令:

現(xiàn)在這個容器內(nèi)的 node 進程在崩潰時就會自動重啟。

以上就是使用pm2 運行node應(yīng)用的流程步驟的詳細內(nèi)容,更多關(guān)于pm2 運行node應(yīng)用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js中的fs.realpathSync方法使用說明

    node.js中的fs.realpathSync方法使用說明

    這篇文章主要介紹了node.js中的fs.realpathSync方法使用說明,本文介紹了fs.realpathSync的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 深入解析桶排序算法及Node.js上JavaScript的代碼實現(xiàn)

    深入解析桶排序算法及Node.js上JavaScript的代碼實現(xiàn)

    桶排序Radix Sort算法利用分治思想將元素分入各桶中排序后匯總,以下我們就來深入解析桶排序算法及Node.js上JavaScript的代碼實現(xiàn),需要的朋友可以參考下
    2016-07-07
  • Node.js中同步和異步編程的區(qū)別及使用方法

    Node.js中同步和異步編程的區(qū)別及使用方法

    在Node.js中,同步和異步編程是兩種不同的處理方式。同步方式會阻塞程序的執(zhí)行,而異步方式則不會。通過掌握它們的區(qū)別和使用方法,可以更好地實現(xiàn)程序的性能優(yōu)化和功能擴展。同時,需要注意異步編程中的回調(diào)地獄問題,使用Promise可以更好地處理異步編程
    2023-05-05
  • node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲

    node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲

    這篇文章主要介紹了node koa2實現(xiàn)上傳圖片并且同步上傳到七牛云存儲,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Node.js文本文件BOM頭的去除方法

    Node.js文本文件BOM頭的去除方法

    這篇文章主要給大家介紹了關(guān)于Node.js文本文件BOM頭的去除方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用socket.io實現(xiàn)簡單聊天室案例

    使用socket.io實現(xiàn)簡單聊天室案例

    這篇文章主要介紹了使用socket.io實現(xiàn)簡單聊天室案例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Node.js 中判斷一個文件是否存在

    Node.js 中判斷一個文件是否存在

    這篇文章主要記錄一些 Node.js 應(yīng)用中的小知識點,如果你 Google/Baidu “Node.js 如何判斷文件是否存在” 發(fā)現(xiàn)給出的很多答案還是使用的 fs.exists,這里不推薦使用 fs.exists 你可以選擇 fs.stat 或 fs.access。
    2020-08-08
  • node.js在Linux下執(zhí)行shell命令、.sh腳本的問題

    node.js在Linux下執(zhí)行shell命令、.sh腳本的問題

    很多時候需要多個命令來完成一項工作,而這個工作又常常是重復(fù)的,這個時候我們自然會想到將這些命令寫成sh腳本,下次執(zhí)行下這個腳本一切就都搞定了,下面就是發(fā)布代碼的一個腳本示例
    2022-01-01
  • node.JS路徑解析之PATH模塊使用方法詳解

    node.JS路徑解析之PATH模塊使用方法詳解

    path模塊包含一系列處理和轉(zhuǎn)換文件路徑的工具集,通過 require('path') 可用來訪問這個模塊。本文將詳細介紹path模塊
    2020-02-02
  • Node.js中安全調(diào)用系統(tǒng)命令的方法(避免注入安全漏洞)

    Node.js中安全調(diào)用系統(tǒng)命令的方法(避免注入安全漏洞)

    這篇文章主要介紹了Node.js中安全調(diào)用系統(tǒng)命令的方法(避免注入安全漏洞),本文講解的一般是連接字符串會時出的安全問題情況,需要的朋友可以參考下
    2014-12-12

最新評論