Maison > interface Web > js tutoriel > Parlons en profondeur de la façon d'utiliser l'outil de gestion des processus Node-pm2

Parlons en profondeur de la façon d'utiliser l'outil de gestion des processus Node-pm2

青灯夜游
Libérer: 2023-04-19 18:59:27
avant
1753 Les gens l'ont consulté

Comment utiliser l'outil de gestion de processus Node-pm2 Dans cet article, nous expliquerons comment utiliser l'outil de gestion de processus Node-pm2. J'espère qu'il vous sera utile !

Parlons en profondeur de la façon d'utiliser l'outil de gestion des processus Node-pm2

Qu'est-ce que pm2

pm2 est un outil de gestion de processus démon qui peut vous aider à protéger et à gérer vos applications. Habituellement, pm2 est utilisé pour la gestion lorsque le service est mis en ligne. Il y a en fait beaucoup de choses que pm2 peut faire, comme la surveillance des modifications de fichiers et le redémarrage automatique, la gestion unifiée de plusieurs processus, l'équilibrage de charge intégré, le système de journalisation, etc. Voyons comment utiliser pm2

pm2 basic commandes

Tout d'abord, nous créons un service de nœud simple, créons un nouveau dossier et exécutons npm init, puis installons pm2npm init,然后装 pm2

npm i pm2 -g
Copier après la connexion

新建 index.js 和 index2.js,写两个简单的 http 服务,然后用 pm2 进行管理。【相关教程推荐:nodejs视频教程编程教学

//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/进行访问`);
});
Copier après la connexion
//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/进行访问`);
});
Copier après la connexion

接下来我们将使用 pm2 的第一个命令: pm2 start index.jspm2 start index2.js 分别启动这两个个程序

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

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

访问http://localhost:3000/

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

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

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

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 个线程

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

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

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

配置文件

上面的例子我们都是使用命令行进行管理的,这样其实挺不方便的,好在 pm2 提供了配置文件的形式。

我们直接使用命令pm2 init simple即可生成一个简单的配置文件ecosystem.config.js,修改一下让它指向我们的两个服务

module.exports = {
  apps: [
    {
      name: "index",
      script: "./index.js",
    },
    {
      name: "index2",
      script: "./index2.js",
    },
  ],
};
Copier après la connexion

然后我们将原先的进程都 kill 掉,执行pm2 start ecosystem.config.js,同样的我们的两个服务都被启动了

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

下面列举一些配置项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",
    },
  ],
};
Copier après la connexion

日志

日志对于后端排查错误是非常重要的,pm2 自带日志功能,比如我们在上面配置文件中配置了日志相关的参数

log_date_format: "YYYY-MM-DD HH:mm Z", //日志时间格式
error_file: "./log/index-error.log", //错误文件路径
out_file: "./log/index-out.log", //输出日志文件路径
Copier après la connexion

当我们启动项目的时候,日志就会记录在 log 下

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

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

pm2 install pm2-logrotate
Copier après la connexion

Créons de nouveaux index.js et index2.js, écrivons deux services http simples, puis utilisez pm2 pour gérer. [Tutoriels associés recommandés : tutoriel vidéo nodejs, Enseignement de la programmation

pm2 set pm2-logrotate:max_size 1K
Copier après la connexion
Copier après la connexion
pm2 restart ecosystem.config.js
Copier après la connexion
Copier après la connexion

Ensuite, nous utiliserons la première commande de pm2 : pm2 start index. js et pm2 start index2.js démarrent respectivement ces deux programmes

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

Bien sûr, si vous souhaitez spécifier le nom du processus, vous pouvez faire ceci : pm2 start -n test index.js </code >, si vous souhaitez surveiller les modifications de fichiers, vous pouvez ajouter <code>--watch et ainsi de suite

🎜Visitez http://localhost:3000/🎜🎜< img src="https://img.php.cn/upload/article/000/000/024/212cce1034f1fd2d471f79272b5eba26-1.png" alt="Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2" chargement="lazy"/>🎜🎜Exécuter journal pm2 OK Voir notre journal imprimé🎜🎜Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2 🎜🎜pm2 a de nombreuses commandes, en voici quelques-unes 🎜
  • Arrêter 1/multiple/tous les programmespm2 stop id/id1 id2 id3/all< / li>
  • Tuer 1/plusieurs/tous les programmespm2 supprimer l'identifiant/id1 id2 id3/tous
  • Redémarrer 1/plusieurs/tous les programmes pm2 redémarrer l'identifiant/ id1 id2 id3/all
  • Démarrer et afficher le journalpm2 start api.js --attach
  • Liste des applications pm2 list
  • Afficher le panneau de surveillance pm2 monit
  • Afficher les données du programme pm2 show [id]

Équilibrage de charge🎜🎜Nous savons tous que NodeJS est un langage asynchrone monothread s'il est déployé directement sur le serveur sans aucun traitement, alors il ne fera que vous. peut utiliser un thread du serveur, ce qui représente un énorme gaspillage de performances. 🎜🎜En utilisant pm2, nous n'avons besoin que d'une seule commande pour que notre programme utilise pleinement le processeur du serveur. Prenons index.js comme exemple : pm2 start index -i max. 10 cœurs et 20 threads, il ouvrira 20 threads🎜🎜image. png🎜🎜Bien sûr, si vous souhaitez spécifier le nombre de threads que vous souhaitez, vous pouvez directement modifier max le nombre de threads que vous souhaitez ouvrir pm2 start index -i 3</ code>🎜🎜<img src="https:// img.php.cn/upload/article/000/000/024/b209adeeafb2038bf428c9dc446f3294-4.png" alt="Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2" chargement="lazy"/>🎜 <h2 data-id="heading-3">Fichiers de configuration🎜🎜Dans les exemples ci-dessus, nous avons tous utilisé la ligne de commande pour gérer, ce qui est en fait assez gênant. Heureusement, pm2 fournit la forme de fichiers de configuration. 🎜🎜On utilise directement la commande <code>pm2 init simple pour générer un fichier de configuration simple ecosystem.config.js, le modifie pour pointer vers nos deux services🎜rrreee🎜 Ensuite on tue tous les processus d'origine et exécutez pm2 start ecosystem.config.js De même, nos deux services sont démarrés🎜🎜Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2🎜🎜Voici quelques éléments de configurationecosystem.config.js< /code>🎜rrreee<h2 data- id="heading-4">Log🎜🎜Log est très important pour les erreurs de dépannage back-end. pm2 a sa propre fonction de journalisation. Par exemple, nous avons configuré les paramètres liés au journal dans le fichier de configuration ci-dessus. démarrez le projet, le journal sera enregistré sous le journal🎜🎜<img src="https://img.php.cn/upload/article/000/000/024/88f246791c471dd2858c0759129cd5c4-6.png" alt="image. png" chargement="lazy"/>🎜🎜La fonction de journalisation de pm2 ne prend pas en charge le fractionnement des journaux. Au fil du temps, les fichiers journaux deviendront de plus en plus volumineux, ce qui affectera non seulement les performances, mais sera également très difficile à résoudre plus tard, nous devons donc diviser les journaux. L'opération de fractionnement du journal est très simple. Il vous suffit d'installer le plug-in <code>pm2-logrotate. Notez que voici pm2 install🎜rrreee🎜 puis d'exécuter pm2 conf pour voir la configuration correspondante🎜🎜🎜. 🎜🎜Expliquez la signification pertinente🎜
  • 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
Copier après la connexion
Copier après la connexion

然后我们简单测试一下这个工具,我们先设置每个 log 文件最大 1kb

然后重启我们的项目

pm2 restart ecosystem.config.js
Copier après la connexion
Copier après la connexion

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

Parlons en profondeur de la façon dutiliser loutil de gestion des processus Node-pm2

总结

pm2对于node服务的管理是十分方便的,文中提到的只是其中一部分,如果你想使用pm2管理你的服务的话可以到官网pm2.io/ 进行学习

更多node相关知识,请访问:nodejs 教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal