亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

為什么使用 pm2

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

啟動(dòng) pm2

首先安裝 pm2:

npm install pm2 -g

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

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

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

可以使用 pm2 start 跑多個(gè)進(jìn)程。

pm2 日志管理

查看下日志:

pm2 logs

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

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

比如 main-out.log 里保存了 main 進(jìn)程的正常日志,而 main-error.log 里保存了它的報(bào)錯(cuò)日志。
可通過 cat ~/.pm2/logs/main-out.log 查看。
查看單個(gè)進(jìn)程的日志:

pm2 logs 進(jìn)程名
pm2 logs 進(jìn)程id

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

pm2 進(jìn)程管理

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

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

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

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

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

pm2 start app.js --watch

不自動(dòng)重啟:

pm2 start app.js --no-autorestart

pm2 負(fù)載均衡

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

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

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

可以看到啟動(dòng)了 8 個(gè)進(jìn)程,因?yàn)槲沂?8 核 cpu。

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

pm2 scale main 1

此時(shí) main 的集群調(diào)整為 1 個(gè)進(jìn)程。

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

pm2 scale main +3

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

我們同樣可以停止和刪除所有 pm2 的進(jìn)程:

pm2 stop all
pm2 delete all

還可以停止刪除單個(gè)進(jìn)程:

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

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

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

pm2 ecosystem

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

pm2 網(wǎng)站

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

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

再執(zhí)行 pm2 plus 就會(huì)打開 bucket 對(duì)應(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 .

運(yùn)行鏡像:

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

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

現(xiàn)在這個(gè)容器內(nèi)的 node 進(jìn)程在崩潰時(shí)就會(huì)自動(dòng)重啟。

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Node.js 中判斷一個(gè)文件是否存在

    這篇文章主要記錄一些 Node.js 應(yīng)用中的小知識(shí)點(diǎn),如果你 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腳本的問題

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

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

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

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

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

最新評(píng)論