Basics: pm2 - reload vs restart
He estado utilizando PM2 por al menos 2 años, y es uno de los mejores process manager
que he usado. Previamente utilizaba forever, pero pm2 ha superado mis expectativas.
En este corto post voy a explicar las diferencias entre recargar y hacer un reset a un daemon con pm2.
Ejemplo
Tenemos 2 daemons o procesos de NodeJS corriendo gracias a pm2
.
$ pm2 ls
┌──────┬──────┬────────┬───┬─────┬────────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
├──────┼──────┼────────┼───┼─────┼────────────┤
│ auth │ fork │ online │ 0 │ 0% │ 28.8 MB │
│ back │ fork │ online │ 0 │ 0% │ 103.9 MB │
└──────┴──────┴────────┴───┴─────┴────────────┘
Si deseamos hacer un restart a uno de los 2 procesos usaremos:
$ pm2 restart back
┌──────┬──────┬────────┬───┬─────┬────────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
├──────┼──────┼────────┼───┼─────┼────────────┤
│ auth │ fork │ online │ 0 │ 0% │ 28.8 MB │
│ back │ fork │ online │ 1 │ 0% │ 10.9 MB │
└──────┴──────┴────────┴───┴─────┴────────────┘
Podemos ver que nuestro proceso back
acaba de sufrir un reset (podemos verlo en la cuarta columna de la tabla de salida)
Ahora, si utilizamos reload, que diferencia visual tenemos?
$ pm2 reload back
Use --update-env to update environment variables
[PM2] Applying action reloadProcessId on app [back](ids: 1)
[PM2] [back](1) ✓
Y verificamos que nuestro daemon ha sufrido un restart:
$ pm2 ls
┌──────┬──────┬────────┬───┬─────┬────────────┐
│ Name │ mode │ status │ ↺ │ cpu │ memory │
├──────┼──────┼────────┼───┼─────┼────────────┤
│ auth │ fork │ online │ 0 │ 0% │ 28.8 MB │
│ back │ fork │ online │ 2 │ 0% │ 103.9 MB │
└──────┴──────┴────────┴───┴─────┴────────────┘
Cuál fué la diferencia?
Según la documentación de pm2 explica que:
La función reload reiniciará a sus workers uno por uno, y para cada worker, esperará hasta que el nuevo haya levantado antes de matar al anterior.
A diferencia de restart
, que mata y reinicia el proceso.
Conclusión
Utilizar pm2 reload logra una recarga del daemon con 0 downtime en un ambiente con multiples cores.
Eso es todo por hoy, gracias por leer.