2008-08-29 12 views
152

Al ejecutar mi aplicación, a veces obtengo un error de too many files open.¿Cómo cambio el límite de archivos abiertos en Linux?

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

Editar ulimit -n 2048 da como resultado un error de permiso.

+0

ver también: https: //unix.stackexchange.com/a/8949/231660 –

Respuesta

128

Siempre puedes intentar hacer un ulimit -n 2048. Esto solo restablecerá el límite para su caparazón 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 duros en Solaris se puede configurar al arrancar desde/etc/system.

set rlim_fd_max = 166384 
set rlim_fd_cur = 8192 

En OS X, estos mismos datos se deben establecer en /etc/sysctl.conf.

kern.maxfilesperproc=166384 
kern.maxfiles=8192 

En Linux, estas configuraciones suelen estar en /etc/security/limits.conf.

Hay dos tipos de límites:

  • suaves límites son simplemente los límites actualmente forzadas
  • límites duros marcan el valor máximo que no puede ser superado mediante el establecimiento de un límite blando

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

A menudo se establecen valores predeterminados cuando se inicia la máquina. 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 de existencia ulimit si desea cambiar el valor predeterminado.

+4

¿me puede decir cómo usar esto en Windows? – Pritam

+1

Esto me ayudó, gracias –

+1

para RedHat, el archivo se encuentra en /etc/security/limits.conf – Tomofumi

82

Si está utilizando Linux y obtiene el error de permiso, deberá aumentar el límite permitido en el archivo /etc/limits.conf o /etc/security/limits.conf (donde se encuentra el archivo depende de su distribución específica de Linux).

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

* hard nofile 10000

A continuación, cerrar la sesión y relogin a su sistema y usted debe ser capaz de hacer:

ulimit -n 10000

sin un error de permiso.

+4

NOTA: Wildcard ** no se aplica ** al usuario 'root'. Debe especificar 'root hard nofile 10000' si desea ajustar el límite de 'root'. –

+1

@JoshPinter Jaja, acabo de pasar las últimas 3 horas examinando cada tutorial sobre cómo cambiar el 'ulimit' y finalmente descubrí que estoy conectado como root. Es por eso que seguí viendo el 1024 en 'ulimit -a'. Cambié el wildcare y agregué un '*' dentro de 'limits.conf'. Todo está bien ahora, (estoy usando las teclas ssh no te preocupes: P) - ¡Gracias! –

+1

@NiCkNewman ¡Me alegro de que te estés riendo al respecto! Ese es un buen rasgo en una persona programadora/sysops. Hice lo mismo y no fue tan jovial. Me alegro de que ayudó! :) –

32

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

webuser hard nofile 64000 

continuación, iniciar la sesión como webuser

su - webuser 

2) Editar siguientes dos archivos para webuser

anexar .bashrc y .bash_profile archivo ejecutando

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

3) Salir, a continuación, volver a entrar y verificar que los cambios se han realizado correctamente:

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

Eso es todo y les bum, bum bum.

+7

Si obtienes cambiar tu línea en limits.conf de 'hard' a 'soft', debería convertirse en la nueva configuración predeterminada y no requerir cambios en los perfiles de bash. – RishiD

+0

Parece que está repitiendo pasos adicionales. Establecer límites solo hará lo mismo que el perfil, pero en todas las sesiones. – Eddie

5

Si algunos de sus servicios se detienen en ulimits, a veces es más fácil poner los comandos adecuados en el script de inicio del servicio. Por ejemplo, cuando Apache está informando

[alerta] (11) de recursos temporalmente no disponible: apr_thread_create: no puede crear subproceso de trabajo

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

Cuestiones relacionadas