Heim  >  Artikel  >  Web-Frontend  >  Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

青灯夜游
青灯夜游nach vorne
2023-04-19 18:59:121714Durchsuche

So verwenden Sie das Node-Prozessmanagement-Tool-pm2. Ich hoffe, dass es für Sie hilfreich ist.

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

pm2 Was 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-Basisbefehl

Zuerst erstellen wir einen einfachen Knotendienst, erstellen einen neuen Ordner, führen npm init aus und installieren dann pm2

npm i pm2 -g
#🎜 🎜#Neuer Index .js und index2.js, schreiben Sie zwei einfache http-Dienste und verwenden Sie dann pm2, um sie zu verwalten. [Empfohlene verwandte Tutorials: nodejs-Video-Tutorial, Programmierunterrichtnpm 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.jspm2 start index2.js 分别启动这两个个程序

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

当然如果你想指定进程名字可以这样: pm2 start -n test index.js,如果你想监听文件改动可以加--watch等等

访问http://localhost:3000/

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

执行pm2 log可以看到我们打印的日志

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

pm2 的命令还有很多,下面列举几个

  • 停止 1 个/多个/所有程序 pm2 stop id/id1 id2 id3/all
  • 杀死 1 个/多个/所有程序 pm2 delete id/id1 id2 id3/all
  • 重启 1 个/多个/所有程序 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 个线程

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

当然如果你想指定多少线程可以直接将 max 改成你想开的线程数 pm2 start index -i 3

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

配置文件

上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 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,同样的我们的两个服务都被启动了

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

下面列举一些配置项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 下

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

pm2 自带的日志功能是不支持日志分割的。随着时间的推移,日志文件会越来越大,不仅会影响性能,后期排查问题也十分麻烦,因此我们需要对日志进行分割。日志分割操作很简单,只需要安装pm2-logrotate

pm2 set pm2-logrotate:max_size 1K
pm2 restart ecosystem.config.js

Als nächstes verwenden wir den ersten Befehl von pm2: pm2 start index.js und pm2 start index2.js starten jeweils diese beiden Programme

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechenNatü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.

Zugriffhttp://localhost:3000/

#🎜🎜#Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen#🎜🎜##🎜🎜#Führen Sie pm2 log aus, um das von uns gedruckte Protokoll anzuzeigen#🎜🎜 ##🎜🎜# Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen #🎜🎜## 🎜🎜#PM2 Es gibt noch viele weitere Befehle, hier ein paar #🎜🎜#
  • Stop 1/multiple/all programpm2 stop id/id1 id2 id3/all code><li>Töte 1/multiple/all Programme<code>pm2 delete id/id1 id2 id3/all
  • Starte 1/multiple/all Programmepm2 restart id/id1 id2 id3/all
  • Starten Sie das Protokoll und zeigen Sie es anpm2 start api.js --attach
  • Anwendungen auflisten Programm pm2 list
  • Überwachungsbereich anzeigen pm2 monit
  • Programmdaten anzeigen pm2 show [id]

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: pm2 start index -i max, z wie meiner Der Computer hat 10 Kerne und 20 Threads und öffnet 20 Threads#🎜🎜##🎜🎜#Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen#🎜🎜##🎜🎜#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#🎜🎜##🎜🎜#image .png#🎜🎜#

Konfigurationsdatei#🎜🎜##🎜🎜#Wir alle Verwenden Sie die Befehlszeile, um die obigen Beispiele zu verwalten. Tatsächlich ist dies ziemlich unpraktisch. PM2 stellt die Form einer Konfigurationsdatei bereit. #🎜🎜##🎜🎜# Wir verwenden direkt den Befehl 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# 🎜🎜##🎜🎜#Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen#🎜🎜##🎜🎜# Nachfolgend sind einige Konfigurationselemente aufgeführt: ecosystem.config.js#🎜🎜#rrreee

Log#🎜🎜## 🎜🎜#Protokolle sind für die Fehlerbehebung sehr wichtig Back-End-Fehler. PM2 verfügt beispielsweise über eine Protokollfunktion in der obigen Konfigurationsdatei#🎜🎜#rrreee#🎜🎜#Wenn wir das Projekt starten, wird das Protokoll im Protokoll aufgezeichnet #🎜🎜##🎜🎜#image. png#🎜🎜##🎜🎜#pm2s eigene Protokollfunktion unterstützt keine Protokollaufteilung. Mit der Zeit werden die Protokolldateien immer größer, was sich nicht nur auf die Leistung auswirkt, sondern auch die spätere Fehlerbehebung sehr mühsam macht, sodass wir die Protokolle aufteilen müssen. Der Protokollaufteilungsvorgang ist sehr einfach. Sie müssen lediglich das Plug-in pm2-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

然后就会发现我们的日志被分割了

Lassen Sie uns ausführlich über die Verwendung des Node-Prozessmanagement-Tools PM2 sprechen

总结

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen