manual de pm2

contenido

  • Introducción
  • Instalar en pc
  • puesta en marcha
  • reiniciar
  • balanceo de carga
  • vista de registro
  • Reinicio automático cuando el uso de la memoria supera el límite superior
  • actualizar pm2
  • problema de extensión
    • Si el maestro cuelga, ¿cómo lo soluciona pm2?
    • ¿Cómo reinicia pm2 el servicio?

Introducción

PM2 es una herramienta de gestión de procesos de nodos, que se puede utilizar para simplificar muchas tareas tediosas de gestión de aplicaciones de nodos, como la supervisión del rendimiento, el reinicio automático, el equilibrio de carga, etc., y es muy fácil de usar.

documentación oficial

Instalar en pc

Una instalación global no podría ser más sencilla.

npm install -g pm2
复制代码

puesta en marcha

pm2 start app.js --watch -i 2
复制代码

Descripción de parámetros:

  • --watch: Escuche los cambios en el directorio de la aplicación y reinicie automáticamente una vez que ocurra un cambio. Si desea escuchar exactamente y no escuchar el directorio, lo mejor es pasar el archivo de configuración.
  • -i --instances: cuántas instancias están habilitadas y se pueden usar para el equilibrio de carga. Si es así -i 0, -i maxla cantidad de instancias se determina en función de la cantidad actual de núcleos de máquina.
  • --ignore-watch: excluye directorios/archivos de escucha, que pueden ser un nombre de archivo específico o un patrón regular. por ejemplo--ignore-watch="test node_modules "some scripts""
  • -n --name: El nombre de la aplicación. Se puede utilizar cuando se visualiza la información de la aplicación.
  • -o --output <path>: La ruta al archivo de registro de salida estándar.
  • -e --error <path>: Ruta al archivo de registro de salida de errores.
  • --interpreter <interpreter>: el intérprete pm2 debe usarse para ejecutar la aplicación (bash, python...). Por ejemplo, usa el script de café para escribir aplicaciones.

reiniciar

pm2 restart app.js
复制代码

detener

Detener una aplicación específica. Primero puede pm2 listobtener el nombre de la aplicación (especificado por --name) o la identificación del proceso.

pm2 stop app_name|app_id

复制代码

Si desea detener todas las aplicaciones, puede

pm2 stop all
复制代码

Eliminar

similar pm2 stop, de la siguiente manera

pm2 delete app_name|app_id
pm2 delete all
复制代码

Ver el estado del proceso

pm2 list
复制代码

Ver información sobre un proceso

$ pm2 descripe app_name | app_id
复制代码

imagen.png

monitor

Podemos usar el siguiente comando para ver el estado de los procesos que se ejecutan actualmente a través de pm2;

$ pm2 monit
复制代码

imagen.png

balanceo de carga

El comando es el siguiente, lo que significa iniciar tres procesos. Si es así -i 0, iniciará automáticamente tantos procesos como sea posible en función de la cantidad actual de núcleos en la máquina.

pm2 start app.js -i 3 # 开启三个进程
pm2 start app.js -i max # 根据机器CPU核数,开启对应数目的进程 
复制代码

vista de registro

Además de abrir el archivo de registro para ver el registro, también puede pm2 logsver el registro en tiempo real. Esto es muy importante para la solución de problemas en línea.

Por ejemplo, si un servicio de nodo se reinicia repentinamente de manera anormal, puede usar la herramienta de registro proporcionada por pm2 para ver el registro en tiempo real y ver si el reinicio anormal se debe a un error de secuencia de comandos o similar.

pm2 logs
复制代码

Reinicio automático cuando el uso de la memoria supera el límite superior

Si desea que su aplicación se reinicie automáticamente después de exceder el límite de memoria utilizada, puede agregar --max-memory-restartparámetros. (con los elementos de configuración correspondientes)

pm2 start big-array.js --max-memory-restart 20M
复制代码

actualizar pm2

$ pm2 save # 记得保存进程状态
$ npm install pm2 -g
$ pm2 update
复制代码

在线监控系统

imagen.png

master 挂了的话,pm2 如何处理?

Node.js 原生集群模式

Node.js 提供了 集群模块 cluster,简单讲就是复制一些可以共享 TCP 连接的工作进程。

工作原理

集群模块会创建一个 master 主进程,然后复制任意多份程序并启动,这叫做工作进程

工作进程通过 IPC 频道进行通信并且使用了 Round-robin algorithm 算法进行工作调度以此实现负载均衡。

Round-robin 调度策略主要是 master 主进程负责接收所有的连接并派发给下面的各个工作进程。

var cluster = require("cluster");
var http = require("http");
var os = require("os");

核数
var numCPUs = os.cpus().length;

if (cluster.isMaster) {
  // Master:
  // Let's fork as many workers as you have CPU cores
  // 创建多个工作线程
  for (var i = 0; i < numCPUs; ++i) {
    cluster.fork();
  }
} else {
  // Worker:
  // Let's spawn a HTTP server
  // (Workers can share any TCP connection.
  //  In this case its a HTTP server)

  http
    .createServer(function (req, res) {
      res.writeHead(200);
      res.end("hello world");
    })
    .listen(8080);
}
复制代码

你可以不受 CPU 核心限制的创建任意多个工作进程。

用原生方法有些麻烦而且还需要处理,如果某个工作线程挂掉了等额外的逻辑。

pm2 的方式

pm2 内置了处理上述的逻辑,不用再写这么多繁琐的代码了

pm2 start app.js -i 4

-i 表示实例程序的个数---就是工作线程。如果i为0表示,会根据当前CPU核心数创建

这样的一行代码就可以啦!
复制代码
  1. 保持程序不中断运行 如果有任何工作进程意外挂掉了,pm2 会立即重启他们,当前你可以在任何时候重启,只需要pm2 restart all
  2. 实时调整集群数量 你可以使用命令 pm2 scale <appName> <n>调整你的线程数量,如 pm2 scale app +3 会在当前基础上加 3 个工作线程
  3. 在生产环境中让程序永不中断 PM2 reload <appName> 命令一个接一个的重启工作线程,在新的工作线程启动后才结束老的工作线程。

这种方式可以保持你的 Node 程序始终是运行状态。即使在生产环境下部署了新的代码补。

也可以使用 gracefulReload 命令达到同样的目的,它不会立即结束工作线程,而是通过 IPC 向它发送关闭信号,这样它就可以关闭正在进行的连接,还可以在退出之前执行一些自定义任务,这种方式更优雅。

process.on("message", function (msg) {
  if (msg === "shutdown") {
    close_all_connections();
    delete_cache();
    server.close();
    process.exit(0);
  }
});
复制代码

pm2 依据什么重启服务?

pm2 es un administrador de procesos para aplicaciones de nodo con equilibrio de carga. Todos sabemos que node.js es ejecutado por un solo proceso. Cuando el programa tiene un error y muere, debe poder ser automático. En este momento, se necesita pm2. Por supuesto, hay muchas herramientas de administración de procesos, como para siempre y así sucesivamente;

Principales características

  • Inicie varios procesos secundarios para hacer un uso completo de la CPU
  • Equilibrio de carga entre procesos secundarios
  • 0 segundos reiniciar
  • Interfaz amigable
  • Proporcionar interfaz de interacción de procesos

Reiniciar el servicio de acuerdo a lo que

pm2 utiliza la detección de latidos para verificar si el proceso secundario está activo y envía paquetes de latidos al proceso secundario cada pocos segundos. Si el proceso secundario no responde, llame a kill para finalizar el proceso y luego  cluster.fork()  un nuevo proceso de nuevo. El proceso puede monitorear el evento de error. En este momento, puede enviar un mensaje al proceso principal para solicitar que se elimine, y el proceso principal llamará a cluster.fork() un nuevo proceso secundario nuevamente en este momento.

Supongo que te gusta

Origin juejin.im/post/7078607908920885278
Recomendado
Clasificación