¿Cómo configurar el proceso de límite de archivo abierto de un usuario?

8

El límite predeterminado de archivos abiertos por proceso es 1024 en, digamos, Linux. Para ciertos demonios esto no es suficiente. Por lo tanto, la pregunta: ¿Cómo cambiar el límite de archivo abierto para un usuario específico?

maxschlepzig
fuente

Respuestas:

16

En Linux puede configurarlo a través de limits.conf, por ejemplo, a través de

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf

(que establece el límite rígido y flexible para procesos iniciados bajo la transmisión debian del usuario en 8192)

Puede verificar el cambio a través de:

# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files                      (-n) 8192
[..]

Si un demonio ya se está ejecutando, debe reiniciarse de modo que se levante el nuevo límite. En caso de que el demonio se inicie manualmente desde una sesión de usuario, el usuario debe volver a iniciar sesión para obtener el nuevo límite.

Alternativamente, también puede especificar límites adicionales directamente /etc/security/limits.conf, por supuesto, pero prefiero el .denfoque de directorio para una mejor mantenibilidad.

Para imponer límites blandos / duros diferentes, use dos entradas, p. Ej.

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192

(justificación de esto: el valor suave se establece después de que el usuario inicia sesión, pero un proceso de usuarios puede aumentar el límite hasta el límite duro)

La configuración limits.conf/ limits.des utilizada por pam_limits.so, que está habilitada por defecto en las distribuciones actuales de Linux.

Relacionado

También hay un límite para todo el sistema en Linux /proc/sys/fs/file-max:

Este archivo define un límite de todo el sistema en la cantidad de archivos abiertos para todos los procesos.

Por ejemplo, el valor predeterminado en Ubuntu 10.04:

$  cat /proc/sys/fs/file-max
786046

El pseudo archivo /proc/sys/fs/file-nrproporciona más información, p. Ej.

$ cat /proc/sys/fs/file-nr
1408    0   786046

el número de identificadores de archivo asignados (es decir, el número de archivos actualmente abiertos); la cantidad de identificadores de archivos libres; y el número máximo de identificadores de archivo

Por lo tanto, por un lado, es posible que también deba ajustar el file-maxlímite de todo el sistema , en caso de que sea muy pequeño y / o el sistema ya esté muy cargado. Por otro lado, solo aumentar file-maxno es suficiente, porque no influye en los límites blandos / duros impuestos por el mecanismo pam_limits.

Para cambiar file-maxen la línea de comando (no es necesario reiniciar):

# sysctl -w fs.file-max=786046

Para cambios permanentes, agregue fs.file-max=786046a /etc/sysctl.confo /etc/sysctl.d.

El límite superior de fs.file-maxse registra en fs.nr_open. Por ejemplo, (nuevamente) en Ubuntu 10.04:

$ sysctl -n fs.nr_open
1048576

(que es 1024 * 1024)

Este sysctl también es configurable.

maxschlepzig
fuente
1
Gracias por la última información: me rascaba la cabeza tratando de descubrir por qué no podía establecer un límite de nofile de usuario mayor que 1048576 en /etc/security/limits.conf
Liczyrzepa