2012-06-15 7 views
11

Sirvo mi software usando pasajero. Genera muchos procesos ruby.Usar dios solo para matar

A veces uno de estos rubíes se hincha y quiero que muera.

Tenía la esperanza de usar a Dios para esa intención. Mi idea era controlar todos estos rubíes y si consume más de 500 MB de memoria durante 3 ciclos, Dios debería intentar matarlo con elegancia. Si permanece vivo por más de 5 minutos, entonces Dios debería matarlo sin gracia.

Me parece que dios siempre intenta volver a ejecutar el servicio, por lo que nos obliga a proporcionar un comando de inicio. ¿Es posible usar a dios solo para matar a los malos procesos conductuales y permitir que el generador de pasajeros los traiga a la vida cuando sea necesario?

Respuesta

4

La respuesta a su pregunta yace en la pregunta misma. Puedes matar los procesos de ruby ​​usando god gem, que es el marco de trabajo del monitor de proceso de ruby ​​por github guys.

básicamente, aquí es cómo funciona: dios

  1. configurar para supervisar el proceso puede ser cualquier cosa de Apache, pasajero, mestizo o simplemente simple de archivos haciendo una tarea de larga duración.
  2. Establecer condicionales en el archivo de configuración de dios en función del cual Dios ejecutará algún código predefinido.

aquí hay un ejemplo simple (tomado de docs). considerar esto como a largo proceso que se ejecuta el archivo que se ejecuta undefiantly el que queremos monitorizar el uso de memoria, vamos a llamarlo simple.rb

loop do 
    puts 'Hello' 
    sleep 1 
end 

ahora, instalamos el god joya & configurarlo para que se ejecute como superusuario por lo que puede matar/generar procesos y luego crear un archivo de configuración. ejemplo (también tomada de docs):

God.watch do |w| 
    w.name = "simple" 
    w.start = "ruby /full/path/to/simple.rb" 
    w.keepalive(:memory_max => 500.megabytes) 
end 

Aquí, como es posible que haya conseguido la idea de si el uso de memoria de proceso es mayor de 500 megabytes, dios lo reiniciará. aquí están algunos recursos que pueden ayudar, si se están iniciando con la gestión de procesos utilizando god joya:

Ahora, recuerde TODO con la figuración para god es en realidad código de rubí legal para que pueda ser creativo & hacer todo tipo de cosas.

por último, si usted está con frecuencia encontrando corriendo proceso de larga duración, os aconsejo probar JRuby la que se trabaja mucho mejor con procesos de larga ejecución debido a la JVM & mucho más rápido que la RM

2

que utilizan la misma configuración en muchos de mis proyectos y tenían los mismos problemas de pérdida de memoria.Después de perder el control, decidimos usar las características del pasajero para abordarlo. Específicamente, permite la configuración (por ejemplo) PassengerMaxRequests 300 que apaga cualquier instancia cuando ha atendido ese número de solicitudes.

Si lo usa, asegúrese de que PassengerMinInstances se establece en 0, ya que preceedes el escenario de solicitudes max.

Cuestiones relacionadas