¿Cómo establezco un límite en la cantidad de archivos que Linux puede tener abiertos?

11

Planeo ejecutar una aplicación Java usando nohup ... &. El límite debe aplicarse a comandos como este.

Ricardo Altamirano
fuente
Pero esto causó un error en mi programa Java

Respuestas:

7

La mayoría de los sistemas usan PAM y tienen pam_limitslímites establecidos por el módulo /etc/security/limits.conf. Se llama al límite por usuario para los archivos abiertos nofile. Puede configurarlo para cada usuario o para un usuario o grupo en particular, y puede establecer un límite que el usuario puede anular (límite flexible) y otro que solo la raíz puede anular (límite estricto). La documentación y la limits.confpágina del manual tienen los detalles. Por ejemplo, para elevar el límite a 50000 para todos, ponga esta línea /etc/limits.conf(la configuración surte efecto cuando inicia sesión):

* - nofile 50000
Gilles 'SO- deja de ser malvado'
fuente
dentro de limits.confhacer * hard nofile 50000y / o * soft nofile 50000. No sé la diferencia técnica entre duro y blando y siempre he hecho ambas cosas.
ron
dentro de SLES 11.4 usando tcsh, por ejemplo, se puede hacer limit descriptors 50000para cambiar el valor dentro de la ventana / sesión de terminal dada.
ron
@ron -` en la segunda columna establece tanto el límite blando como el duro. Solo necesita establecerlos por separado si desea valores diferentes. Un límite suave se puede cambiar en cualquier momento ejecutando el ulimitcomando (llamado limiten csh). Un usuario sin privilegios nunca puede ir más allá del límite estricto.
Gilles 'SO- deja de ser malvado'
si solo configuro el hard, ¿el valor soft permanece como el predeterminado? si solo configuro soft y no hard, ¿hard sigue siendo el valor predeterminado o un valor soft inherentemente igual? ¿Puedo configurar soft> hard? ¿El soft es el valor real que está vigente? perdon por las preguntas
ron
@ron El límite suave se limita automáticamente al límite duro. Si solo establece el límite rígido, esto establece el límite flexible en max (default_soft_limit, actual_hard_limit).
Gilles 'SO- deja de ser malvado'
4

puedes agregar fs.file-max = <your number>a /etc/sysctl.conf. Luego reiniciar.

usuario1606
fuente
cat / proc / sys / fs / file-max es 169203, pero ulimit -n es 1024
No es necesario reiniciar. Solo corre sysctl fs.file-max=123456. ( /etc/sysctl.confse lee en el momento del arranque mediante un script que invoca sysctlel contenido).
Gilles 'SO- deja de ser malvado'
3
ulimit -n

puede modificar la configuración por proceso y

/proc/sys/fs/file-max

o la variable llamada sysctl fs.file-maxse puede usar para leer y establecer el valor de todo el sistema

ptman
fuente
cat / proc / sys / fs / file-max es 169203, pero ulimit -n es 1024
1

Puede usar ulimit para esto:

http://bloggerdigest.blogspot.com/2006/10/purpose-of-ulimit-linux-command.html

Aunque debe asegurarse de que es absolutamente necesario abrir tantos identificadores de archivos antes de recurrir a dichos ajustes. Aumentar el número máximo de identificadores de archivos solo porque ha olvidado hacer un inputstream.close () en un bucle solo retrasará el problema subyacente.


fuente
1
Quiero conectarme con muchos clientes
1

Use ulimit (comando Bash - man bash o encuentre algo similar para su shell) por instancia de programa. No use los límites globales del sistema si no sabe qué está haciendo: posibles DoS.

teZeriusz
fuente
En SLES 11.4 he puesto nofileen limits.confser 100000 éxito. Puedo dar fe de que establecer un valor demasiado grande impidió el inicio de sesión posterior con SSH y tuve que arrancar desde dvd para corregir ese valor en limits.conf para recuperar el sistema.
ron
0
vi ~/.bashrc

Y agregue una línea al final del archivo

ulimit -n 169203
Paulo Tomé
fuente