librelist archives

« back to archive

Unicorn y Rolling Restart

Unicorn y Rolling Restart

From:
NachoKB
Date:
2011-01-25 @ 22:17
Estimados,
  los molesto con una consulta medio off-topic; si bien no trata sobre Ruby,
la mayoría de los suscriptores aquí trabajan con web, y espero no ser el
único, con Unicorn.

  Uno de los features que me atrajo a Unicorn fue la posibilidad de realizar
"rolling restarts". Esto es, levantar una nueva instancia del server y que
los viejos workers se cierren sólo luego de terminar de atender los requests
que están atendiendo (para no cortarle la conexión a ningún cliente).

  Durante un tiempo esto me anduvo de 10. Le ganó, en mi caso, a la
posibilidad de reducir el uso de memoria con Passenger (y Ruby Enterprise
Edition, usando copy-on-write).

  Esto se realiza enviando una signal USR2 al proceso master, lo que provoca
que se levante un nuevo master que levantará sus nuevos hijos. El primer
hijo detectará al viejo master y le enviará QUIT (de manera que sus hijos
son terminados luego de atender el request actual). Esto está mejor
explicado en [1].

  Recientemente, sin embargo, esto no me funciona más. Al enviar USR2, no
levanta ningún nuevo master y nada sucede. Lo raro es que me queda un server
donde sí funciona... ¿alguien tiene alguna experiencia con esto?

  Sospecho que hay un tema de versiones ya que el server que funciona
utiliza una versión muy vieja de Unicorn, aunque recuerdo que me ha
funcionado con alguna más nueva; la última versión, por otro lado, falla. Lo
complicado es que son servers de productivo, mucho no puedo jugar.

  Gracias,

Nacho

[1] http://www.faqs.org/faqs/software-eng/testing-faq/section-13.html