lunes, 3 de enero de 2011

ulimit & limits.conf: Recursos del sistema

Primeramente quiero aprovechar este espacio para desear feliz año nuevo a mis escasos y desatendidos lectores ya que últimamente (varios meses atrás) que no he colocado nada por aquí. Para ponerme al día, tocaremos este sencillo pero importante tópico.

GNU/Linux nos provee varios mecanismos para administrar los recursos del sistema, como el paso de parámetros al kernel, memoria (scheduling priority), recursos físicos, etc. Los limites PAM ( pam_limits ), son limites de los recursos del sistema que son aplicados a los usuarios al iniciar sesión. Entre algunos de los recursos a los que les podemos aplicar este limite tenemos los siguientes:
  • Máximo numero de archivos abiertos.
  • Máximo tiempo en CPU.
  • Máximo numero de procesos.
  • Máximo numero de logins en el sistema.
  • Máxima prioridad permitida a un proceso.

El administrador deberá modificar el archivo /etc/security/limits.conf para administrar estos limites, mientras que los usuarios podrán jugar con el comando ulimit para mover sus valores dentro del rango permitido. El archivo de configuración se arma con registros de cuatro campos, de izquierda a derecha son los siguientes:

Campo 1 - Dominio: Se debe especificar el usuario o el grupo al que se aplicara el limite.
Campo 2 - Tipo: Hard o soft, el primero es el limite del cual el usuario no podrá pasar mientras que el segundo es el valor por defecto que tomara el usuario tras hacer login. El carácter "-", indica que se aplican los dos tipos simultáneamente con el mismo valor.
Campo 3 - Item: El recurso que se desea limitar (core, data, fsize, memlock, nofile, rss, stack, etc).
Campo 4 - Value: Valor que se va a asignar al recurso.

Dado el siguiente archivo de configuración, comentaremos algunas cosas


martin hard nofile 4096
martin - nproc 512


Tenemos dos ítem: nofile y nproc (numero máximo de archivos abiertos y máximo numero de procesos). Después de que el usuario martin inicia sesión podría consultar los valores que tiene asociados con los comandos ulimit -n y ulimit -u, además de ver la lista de ítems completos y sus valores con ulimit -a. En este caso los valores mostrados serian de la siguiente manera:

open files (-n) 1024
max user processes (-u) 512


El usuario puede crecer nofile hasta 4096, pero no mas de ese valor, sin embargo, nproc ya no puede crecer mas, si se intenta se conseguirá un mensaje "no se puede modificar el límite: Operación no permitida".

Finalmente en la figura, verificamos esta información para el máximo numero de procesos, tratando de colgar el sistema con una bomba fork, la cual funciona con recursividad tratando de llevar los procesos hasta que el sistema deje de responder, con aplicado este limite podemos evitar esto.