¿Cómo puedo cambiar el límite del número de archivos abiertos en Linux? [cerrado]


Al ejecutar mi aplicación a veces recibo un error sobre too many files open.

Ejecutando ulimit -a informa que el límite es 1024. ¿Cómo aumento el límite por encima de 1024?

Editar ulimit -n 2048 resulta en un error de permiso.

 167
Author: Charles Menguy, 2008-08-29

4 answers

Siempre puedes intentar hacer un ulimit -n 2048. Esto solo restablecerá el límite para su shell actual y el número que especifique no debe exceder el límite duro

Cada sistema operativo tiene una configuración de límite duro diferente en un archivo de configuración. Por ejemplo, el límite de archivos abiertos en Solaris se puede establecer al arrancar desde /etc/system.

set rlim_fd_max = 166384
set rlim_fd_cur = 8192

En OS X, estos mismos datos deben ser establecidos en /etc/sysctl.conf.

kern.maxfilesperproc=166384
kern.maxfiles=8192

Bajo Linux, estas configuraciones a menudo están en /etc/security/limits.conf.

Hay dos tipos de límites:

  • los límites suaves son simplemente los límites actualmente aplicados
  • límites duros marcan el valor máximo que no se puede superar estableciendo un límite blando

Los límites suaves pueden ser establecidos por cualquier usuario mientras que los límites duros son cambiables solo por root. Los límites son una propiedad de un proceso. Se heredan cuando se crea un proceso hijo, por lo que se deben establecer límites en todo el sistema durante el proceso. la inicialización del sistema en los scripts de inicio y los límites de usuario deben establecerse durante el inicio de sesión del usuario, por ejemplo, mediante el uso de pam_limits.

A menudo hay valores predeterminados cuando la máquina arranca. Por lo tanto, aunque puede restablecer su ulimit en un shell individual, puede encontrar que se restablece al valor anterior al reiniciar. Es posible que desee grep sus scripts de arranque para los comandos ulimit existencia si desea cambiar el valor predeterminado.

 134
Author: hoyhoy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-26 06:29:14

Si está usando Linux y tiene el error de permiso, necesitará aumentar el límite permitido en el archivo /etc/limits.conf o /etc/security/limits.conf (la ubicación del archivo depende de su distribución de Linux específica).

Por ejemplo, para permitir que cualquier persona en la máquina aumente su número de archivos abiertos hasta 10000, agregue la línea al archivo limits.conf.

* hard nofile 10000

Luego cierre sesión y vuelva a iniciar sesión en su sistema y debería poder hacer:

ulimit -n 10000

Sin un error de permiso.

 88
Author: Jonathan Stanton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-14 15:53:51

1) Añádase la siguiente línea a /etc/security/limits.conf

webuser hard nofile 64000

Luego inicie sesión como usuario web

su - webuser

2) Editar los siguientes dos archivos para webuser

Añadir .bashrc y .bash_profile archivo ejecutando

echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile

3) Cierre la sesión, luego vuelva a iniciar sesión y verifique que los cambios se hayan realizado correctamente:

$ ulimit -a | grep open
open files                      (-n) 64000

Eso es todo y ellos boom, boom boom.

 33
Author: Vikrant Telkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-11 17:08:41

Si algunos de sus servicios se resisten a ulimits, a veces es más fácil poner los comandos apropiados en el script init del servicio. Por ejemplo, cuando Apache está reportando

[alert] (11) Resource temporarily unavailable: apr_thread_create: unable to create worker thread

Intenta poner ulimit -s unlimited en /etc/init.d/httpd. Esto no requiere un reinicio del servidor.

 5
Author: Sysadmin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-27 22:37:10