2010-04-02 15 views
9

Tengo un problema con los archivos abiertos en mi Ubuntu 9.10 cuando ejecuto el servidor en Python2.6 Y el problema principal es que no sé por qué es así ..socket.accept error 24: Para muchos archivos abiertos

he puesto

ulimit -n = 999999

net.core.somaxconn = 999999

fs.file-max = 999,999

y l sof me da unos 12000 archivos abiertos cuando el servidor se está ejecutando.

Y también estoy usando epoll.

Pero después de un tiempo que es empezar a dar a excepcion:

Archivo "/usr/lib/python2.6/socket.py", la línea 195, en aceptar de error: [24] Errno Demasiados archivos abiertos

Y no sé cómo puede alcanzar el límite de archivos cuando no se alcanza.

Gracias por la ayuda)

+0

¿Qué devuelve "ulimit -n"? ¿El sistema realmente te permite configurarlo en 999999? –

+1

Probablemente esté presionando el límite del descriptor de archivo por proceso y no observe cómo lo ha modificado. Ver '/usr/include/linux/limits.h NR_OPEN' ¿Qué haces con 12k archivos abiertos? – msw

+0

Acerca de este "/usr/include/linux/limits.h NR_OPEN" no lo sabía, se configuró en 1024, cambió hasta 65536. Acerca de "ulimit -n" es el resultado 999999 Comprobará ahora el servidor con esta nueva opción NR_OPEN.Y contestará) Gracias) –

Respuesta

20

Parámetros que configuran las conexiones abiertas máx.

en /etc/sysctl.conf

complemento:

net.core.somaxconn=131072 
fs.file-max=131072 

y luego:

sudo sysctl -p 

en /usr/include/linux/limits.h

cambio :

NR_OPEN = 65536 

en /etc/security/limits.conf

complemento:

*    soft nofile   65535 
*    hard nofile   65535 
+0

¿Cuál es la función de este límite? ¿Mantener a un usuario malicioso de ...? – meawoppl

+0

esto limita el número de descriptores abiertos por usuario. Entonces, si, por ejemplo, su base de datos consume todos los descriptores, su servidor web seguirá funcionando. –

6

También puede hacerlo desde su código Python, como a continuación

import resource 
resource.setrlimit(resource.RLIMIT_NOFILE, (65536, 65536)) 

El segundo argumento es tupla (soft_limit, hard_limit). El límite estricto es el techo para el límite suave. El límite suave es lo que realmente se aplica para una sesión o proceso. Esto permite al administrador (o usuario) establecer el límite estricto para el uso máximo que desean permitir. Otros usuarios y procesos pueden usar el límite suave para autolimitar su uso de recursos a niveles incluso más bajos si así lo desean.

+0

¿Esto hace un cambio temporal o permanente? – Michael

+0

@Michael He actualizado la respuesta. –

+0

La actualización ayuda a explicar la función, pero mi pregunta es si esto hace un cambio permanente o si reinicio el intérprete de Python se restablecerán los límites. – Michael

Cuestiones relacionadas