process limit upstart memory-consumption

process - Configuración de los límites de consumo de memoria con Upstart



limit memory-consumption (2)

Anexar esto al final de myapp-web-*.conf provocará que cualquier llamada de asignación que intente asignar más de 150mb de memoria devuelva ENOMEM :

limit rss 157286400 157286400

El proceso puede fallar en este punto o no. Eso depende del proceso!

Aquí hay una prueba para esto en la fuente Upstart .

Recientemente me he vuelto bastante aficionado a Upstart. Anteriormente he estado usando God, Monit y Bluepill, pero realmente no me gustan estas soluciones, así que estoy probando con Upstart.

He estado usando la gema Foreman para generar algunos archivos de configuración de Upstart básicos para mis procesos en /etc/init . Sin embargo, estos archivos generados solo manejan el reaparecimiento de un proceso bloqueado. Me preguntaba si es posible decirle a Upstart que reinicie un proceso que consume, por ejemplo, > 150mb de memoria, como haría con Monit, God o Bluepill.

Leí los documentos de Upstart y this parece ser lo que estoy buscando. Aunque no tengo ni idea de cómo configurar algo como esto.

Lo que básicamente quiero es bastante simple. Quiero reiniciar mi proceso web si el uso de memoria es > 150mb ram. Estos son los archivos que tengo:

|-- myapp-web-1.conf |-- myapp-web-2.conf |-- myapp-web-3.conf |-- myapp-web.conf |-- myapp.conf

Y sus contenidos son:

myapp.conf

pre-start script bash << "EOF" mkdir -p /var/log/myapp chown -R deployer /var/log/myapp EOF end script

myapp-web.conf

start on starting myapp stop on stopping myapp

myapp-web-1.conf / myapp-web-2.conf / myapp-web-3.conf

start on starting myapp-web stop on stopping myapp-web respawn exec su - deployer -c ''cd /var/applications/releases/20110607140607; cd myapp && bundle exec unicorn -p $PORT >> /var/log/myapp/web-1.log 2>&1''

Cualquier ayuda muy apreciada!


Desde los documentos de Upstart, los límites provienen de las opciones de llamada del sistema rlimit . ( http://upstart.ubuntu.com/cookbook/#limit )

Dado que la configuración de Linux 2.4+ rss (Resident Set Size) no tiene ningún efecto.

Una alternativa ya sugerida en otras respuestas es la que establece los límites de tamaño del espacio de direcciones de la memoria virtual. Esto tendrá un efecto muy diferente de establecer límites de memoria "reales".

limit as <soft limit> <hard limit>

Extracto de las páginas del manual para setrlimit:

RLIMIT_AS El tamaño máximo de la memoria virtual del proceso (espacio de direcciones) en bytes. Este límite afecta a las llamadas a brk (2), mmap (2) y mremap (2), que fallan con el error ENOMEM al exceder este límite. También la expansión automática de la pila fallará (y generará un SIGSEGV que mata el proceso si no se ha hecho disponible una pila alternativa a través de sigaltstack (2)). Dado que el valor es largo, en máquinas con un largo de 32 bits, este límite es a lo sumo 2 GiB, o este recurso es ilimitado.