
Tengo un script de larga duración que inicia varios procesos secundarios en una máquina Linux con 8 GB de memoria. Después de unas horas de ejecución, ocupa casi el 90% de la memoria y esto hace que otros servicios, como SSH, no respondan cuando comienza a intercambiar discos.
¿Cuál es la mejor manera de limitar mediante programación el uso general de memoria para mi script y todos los procesos secundarios, sin establecer un límite de memoria específico para cada proceso individualmente? Diferentes procesos secundarios pueden utilizar cantidades muy diferentes de memoria, por lo que sería muy ineficiente establecer umbrales fijos.
Idealmente, me gustaría simplemente especificar "usar solo hasta el 75% de la memoria" y dejar que el sistema lo divida entre los elementos secundarios según sea necesario, para garantizar que aún pueda utilizar SSH en la máquina en cualquier momento. Primero intenté configurar un trabajo cron para cambiar automáticamente sshd a la prioridad más alta, pero eso no tuvo ningún efecto y habitualmente no puedo iniciar sesión mediante SSH, o el indicador de SSH es inutilizable.
Respuesta1
Ejecute los procesos como un usuario dedicado y configúrelo a través degrupos c:
/etc/cgconfig.conf
:
group limitedram {
memory {
memory.limit_in_bytes = 6442450944;
}
}
y /etc/cgrules.conf
:
serviceuser memory limitedram/
Eso limita el uso de la memoria serviceuser
a 6 GB.