So verwenden Sie das Node-Prozessmanagement-Tool-pm2. Ich hoffe, dass es für Sie hilfreich ist.
pm2 ist ein Daemon-Verwaltungstool, das Ihnen beim Schutz und der Verwaltung Ihrer Anwendungen helfen kann. Normalerweise wird pm2 zur Verwaltung verwendet, wenn der Dienst online geht. Es gibt tatsächlich viele Dinge, die pm2 tun kann, wie z. B. die Überwachung von Dateiänderungen und den automatischen Neustart, die einheitliche Verwaltung mehrerer Prozesse, einen integrierten Lastausgleich, ein Protokollierungssystem usw. Werfen wir einen Blick auf die Verwendung von pm2
#🎜🎜 #pm2-BasisbefehlZuerst erstellen wir einen einfachen Knotendienst, erstellen einen neuen Ordner, führennpm init
aus und installieren dann pm2npm i pm2 -g
npm init
,然后装 pm2//index.js let http = require("http"); let server = http.createServer(); server.on("request", function (req, res) { console.log("------------------enter"); res.write("hello juejin"); res.end(); }); server.listen(3000, function () { console.log(`服务器启动成功,通过http://localhost:3000/进行访问`); });
新建 index.js 和 index2.js,写两个简单的 http 服务,然后用 pm2 进行管理。【相关教程推荐:nodejs视频教程、编程教学】
//index2.js let http = require("http"); let server = http.createServer(); server.on("request", function (req, res) { console.log("------------------enter2"); res.write("hello juejin2"); res.end(); }); server.listen(3001, function () { console.log(`服务器启动成功,通过http://localhost:3001/进行访问`); });
module.exports = { apps: [ { name: "index", script: "./index.js", }, { name: "index2", script: "./index2.js", }, ], };
接下来我们将使用 pm2 的第一个命令: pm2 start index.js
和pm2 start index2.js
分别启动这两个个程序
当然如果你想指定进程名字可以这样: pm2 start -n test index.js
,如果你想监听文件改动可以加--watch
等等
访问http://localhost:3000/
执行pm2 log
可以看到我们打印的日志
pm2 的命令还有很多,下面列举几个
pm2 stop id/id1 id2 id3/all
pm2 delete id/id1 id2 id3/all
pm2 restart id/id1 id2 id3/all
pm2 start api.js --attach
pm2 list
pm2 monit
pm2 show [id]
我们都知道 NodeJS 是一个异步单线程语言,倘若不做任何处理直接部署到服务器上,那么它也只能使用服务器的一个线程,这样是非常浪费性能的。
使用 pm2 只需一个命令就能让我们的程序充分利用服务器的 CPU,拿 index.js 为例:pm2 start index -i max
,比如我的电脑是 10 核 20 线程,它就会开 20 个线程
当然如果你想指定多少线程可以直接将 max 改成你想开的线程数 pm2 start index -i 3
上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 pm2 提供了配置文件的形式。
我们直接使用命令pm2 init simple
即可生成一个简单的配置文件ecosystem.config.js
,修改一下让它指向我们的两个服务
module.exports = { apps: [ { name: "index", //name script: "./index.js", //相对于pm2 start 的相对路径 cwd: "", //要启动的应用程序的目录 instances: 2, //要启动实例的数量,就是上面提到的负载 watch: true, //是否启动监听 env: { NODE_ENV: "development" }, // 将出现在您的应用程序中的 env 变量 env_xxx: { NODE_ENV: "xxx", //使用pm2注入xxx变量进行切换 }, log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式 error_file: "./log/index-error.log", //错误文件路径 out_file: "./log/index-out.log", //输出日志文件路径 max_restarts: 10, //最大重启数 restart_delay: 4000, //重启延迟时间ms autorestart: true, //是否自动重启 cron_restart: "", //定时重启 使用cron表达式 }, { name: "index2", script: "./index2.js", }, ], };
然后我们将原先的进程都 kill 掉,执行pm2 start ecosystem.config.js
,同样的我们的两个服务都被启动了
下面列举一些配置项ecosystem.config.js
log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式 error_file: "./log/index-error.log", //错误文件路径 out_file: "./log/index-out.log", //输出日志文件路径
日志对于后端排查错误是非常重要的,pm2 自带日志功能,比如我们在上面配置文件中配置了日志相关的参数
pm2 install pm2-logrotate
当我们启动项目的时候,日志就会记录在 log 下
pm2 自带的日志功能是不支持日志分割的。随着时间的推移,日志文件会越来越大,不仅会影响性能,后期排查问题也十分麻烦,因此我们需要对日志进行分割。日志分割操作很简单,只需要安装pm2-logrotate
pm2 set pm2-logrotate:max_size 1K
pm2 restart ecosystem.config.js
pm2 start index2.js
starten jeweils diese beiden ProgrammeNatürlich, wenn Sie den Prozess angeben möchten Der Name kann wie folgt lauten: pm2 start -n test index.js
. Wenn Sie Dateiänderungen überwachen möchten, können Sie --watch
usw. hinzufügen.
Zugriff< code>http://localhost:3000/
#🎜🎜##🎜🎜##🎜🎜#Führen Siepm2 log
aus, um das von uns gedruckte Protokoll anzuzeigen#🎜🎜 ##🎜🎜# #🎜🎜## 🎜🎜#PM2 Es gibt noch viele weitere Befehle, hier ein paar #🎜🎜#pm2 stop id/id1 id2 id3/all</ code>< /li><li>Töte 1/multiple/all Programme<code>pm2 delete id/id1 id2 id3/all
pm2 restart id/id1 id2 id3/all
pm2 start api.js --attach
pm2 monit
pm2 show [id]</code >< /li></ul><h2 data-id="heading-2">Load Balancing#🎜🎜##🎜🎜#Wir alle wissen, dass NodeJS eine asynchrone Single-Threaded-Sprache ist, wenn sie direkt auf dem bereitgestellt wird Server kann nur ein Thread des Servers verwendet werden, was eine enorme Leistungsverschwendung darstellt. #🎜🎜##🎜🎜#Für die Verwendung von pm2 ist nur ein Befehl erforderlich, damit unser Programm die CPU des Servers vollständig nutzen kann. Nehmen Sie index.js als Beispiel: <code>pm2 start index -i max
, z wie meiner Der Computer hat 10 Kerne und 20 Threads und öffnet 20 Threads#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Wenn Sie natürlich angeben möchten, wie viele Threads Sie möchten, können Sie max direkt in die Zahl ändern Anzahl der Threads, die Sie öffnen möchten pm2 start index -i 3
#🎜🎜##🎜🎜##🎜🎜#pm2 init simple
, um eine einfache Konfigurationsdatei ecosystem.config.js
zu generieren und ändern sie so, dass sie auf unsere beiden Dienste verweist #🎜🎜#rrreee#🎜🎜#Dann beenden wir die ursprünglichen Prozesse und führen pm2 start Ecosystem.config.js
aus. Ebenso werden unsere beiden Dienste gestartet# 🎜🎜##🎜🎜##🎜🎜##🎜🎜# Nachfolgend sind einige Konfigurationselemente aufgeführt: ecosystem.config.js
#🎜🎜#rrreeepm2-logrotate
installieren und dann pm2 conf ausführen die relevante Konfiguration#🎜🎜# #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Erklären Sie die relevante Bedeutung#🎜🎜#Compress:是否通过 gzip 压缩日志
max_size:单个日志文件的大小
retain:保留的日志文件个数
dateFormat:日志文件名中的日期格式,默认是 YYYY-MM-DD_HH-mm-ss
rotateModule:是否把 pm2 本身的日志也进行分割,
workerInterval:检查文件时间间隔
rotateInterval:设置强制分割,默认值是 0 0 * * *,意思是每天晚上 0 点分割,这里使用的是 corn 表达式,不会的可以搜索一下
如果我们想要配置也很简单,比如修改 max_size
pm2 set pm2-logrotate:max_size 1K
然后我们简单测试一下这个工具,我们先设置每个 log 文件最大 1kb
然后重启我们的项目
pm2 restart ecosystem.config.js
然后就会发现我们的日志被分割了
pm2对于node服务的管理是十分方便的,文中提到的只是其中一部分,如果你想使用pm2管理你的服务的话可以到官网pm2.io/ 进行学习
更多node相关知识,请访问:nodejs 教程!
Das obige ist der detaillierte Inhalt vonLassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!