Gestión de Límites de Recursos del Sistema en Linux con limits.conf

El sistema operativo Linux, por defecto, impone ciertas restricciones en el uso de recursos del sistema para garantizar la estabilidad. Estas limitaciones pueden ser ajustadas mediante la configuración del archivo /etc/security/limits.conf. Modificar estas configuraciones generalmente solo es necesario en escenarios específicos o cuando se tiene un conocimiento profundo de los parámetros.

Es importante notar que existe otra forma de ajustar el límite máximo de descriptores de archivo abiertos a través del sistema de archivos procfs, accesible mediante cat /proc/sys/fs/file-max.

El archivo limits.conf permite definir límites para el consumo de recursos por parte de los usuarios. La sintaxis de cada línea es la siguiente:

<dominio> <tipo> <elemento> <valor>

Donde:

  • <dominio> puede ser:
  • Un nombre de usuario específico.
  • Un nombre de grupo, precedido por @ (ej. @developers).
  • El carácter comodín * para establecer valores predeterminados aplicables a todos los usuarios (excepto root).
  • El carácter comodín % para el límite maxlogins.
  • <tipo> puede ser:
  • soft: Límite blando. Es el límite que el sistema aplica inicialmente. Puede ser incrementado por el usuario hasta el valor del límite duro.
  • hard: Límite duro. Es el límite máximo absoluto que no puede ser superado, ni siquiera incrementado por el usuario.
  • <elemento> define el recurso a limitar, incluyendo:
  • core: Tamaño máximo del archivo core (en KB).
  • data: Tamaño máximo del segmento de datos (en KB).
  • fsize: Tamaño máximo de archivo (en KB).
  • memlock: Espacio máximo de memoria bloqueada (en KB).
  • nofile: Número máximo de descriptores de archivo abiertos.
  • rss: Tamaño máximo del conjunto residente (memoria física) (en KB).
  • stack: Tamaño máximo de la pila por hilo (en KB).
  • cpu: Tiempo máximo de CPU en minutos.
  • nproc: Número máximo de procesos por usuario.
  • as: Límite del espacio de direcciones.
  • maxlogins: Número máximo de inicios de sesión simultáneos para un usuario.
  • maxsyslogins: Número máximo de inicios de sesión simultáneos en todo el sistema.
  • priority: Prioridad de ejecución de los procesos del usuario.
  • locks: Número máximo de bloqueos de archivo que un usuario puede mantener.
  • sigpending: Número máximo de señales pendientes.
  • msgqueue: Memoria máxima utilizada por colas de mensajes POSIX (en bytes).
  • nice: Valor máximo de "niceness" permitido para incrementar la prioridad.
  • rtprio: Prioridad máxima en tiempo real.

A continuación, se presenta un ejemplo de configuración:

root     soft   nofile   200000
root     hard   nofile   200000
admin    hard   nofile   65536
admin    soft   nofile   65536

Un caso común donde se requiere ajustar estos límites es al encontrar el error "too many open files" al ejecutar servicios como MySQL. En tales situaciones, se puede incrementar el valer de nofile para el usuario que ejecuta el proceso (mysqld en el caso de MySQL).

Es importante comprender la distinción entre límites soft y hard. El límite hard representa el techo absoluto, mientras que el soft es un límite inicial que puede ser elevado por el proceso hasta alcanzar el hard. Una configuración razonable podría ser:

mysql    soft   nofile   50000
mysql    hard   nofile   51200

Los cambios en limits.conf suelen requerir un nuevo inicio de sesión para que surtan efecto.

Para verificar los límites de recursos actuales de un usuario, se puede utilizar el comando ulimit -a.

Adicionalmente, el archivo /etc/security/limits.d/90-nproc.conf puede contener configuraciones relacionadas con el número máximo de procesos (nproc). Algunas distribuciones de Linux, como CentOS 5 y 6, utilizan sintaxis específicas para añadir estas configuraciones:

# Para CentOS 5
echo '*   hard   nproc    65535'  >>/etc/security/limits.conf
echo '*   hard   nofile     65535'  >>/etc/security/limits.conf

# Para CentOS 6
echo '*   hard    nproc    65535'  >>/etc/security/limits.d/90-nproc.conf

Es relevante mencionar que el usuario root a menudo está exento de la limitación nproc impuesta por limits.conf.

En el contexto de servidores web como Nginx, la directiva worker_rlimit_nofile dentro del archivo de configuración de Nginx (nginx.conf) también controla el número de descriptores de archivo que los procesos de Nginx pueden abrir:

events
{
    worker_rlimit_nofile 51200;
    worker_connections 6000;
}

Etiquetas: linux limits.conf ulimit recursos del sistema administración de sistemas

Publicado el 10-10 09:04