¿Por qué no puede superar los 4096 archivos abiertos máximos para usuarios no root?

13

Parece que no puedo aumentar el nofilelímite para usuarios no root en Ubuntu 14.04, a pesar de seguir todas las respuestas de StackExchange relacionadas con este problema. Hasta ahora tengo:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

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

Reiniciado, conectado y:

$ ulimit -n 4097
-bash: ulimit: open files: cannot modify limit: Operation not permitted

Hay todavía alguna manera parece que hay un límite de 4096 como máximo para los usuarios que no sean root.

Coma cafeína
fuente
Tengo exactamente el mismo problema en el escritorio Ubuntu 16.10. No importa lo que intente, los límites son 1024 o 4096.
NathanAldenSr

Respuestas:

13

Usando Ubuntu 14.04 obtuve el límite duro descrito:

user@notebook:~$ ulimit -Hn 4096  

Podría reducirlo usando ulimit, pero no aumentarlo, tal como lo describe la pregunta. Como describe el manual de ulimit:

solo la raíz puede aumentar el límite duro

Así que traté de establecer un límite más alto de /etc/security/limits.confesta manera:

user hard nofile 9999 

y un nuevo inicio de sesión como ssh localhost -l userme dio el nuevo límite:

user@notebook:~$ ulimit -Hn 9999

Espero que esto funcione para usted también.

TomTomTom
fuente
Gracias TomTomTom Ya tengo ese cambio en /etc/security/limits.d/custom.conf. Intenté ponerlo directamente en /etc/security/limits.conf como sugirió, y todavía obtengo "bash: ulimit: abrir archivos: no se puede modificar el límite: Operación no permitida".
Cafeína Coma
I - sólo supongo - una de dos razones, por lo que no funciona para usted:
tomtomtom
1
Me tomó demasiado tiempo editar el comentario incompleto. Aquí vamos: supongo, una de las dos razones por las cuales esto no funciona para usted: 1. /etc/security/limits*no es leído por su mecanismo de inicio de sesión, por una razón aún desconocida. 2. Su límite duro se establece en 4096 en otro lugar, y "solo la raíz puede aumentar ...". Puede verificar sus perfiles como .bashrc(dependiendo de su shell), o puede buscar /etcotros lugares, donde se pueden establecer límites, como find /etc | grep -e ulimit -e 4096 -e nofile. Por cierto: ¿intentaste ssh? Y: ¿has cambiado /etc/ssh/sshd.confpara evitar PAM por alguna razón?
TomTomTom
Sí, todo el inicio de sesión es a través de ssh. He desactivado UsePAM: varias guías recomiendan esto como parte de permitir solo inicios de sesión basados ​​en claves ssh. Intentaré encenderlo temporalmente, solo para ver si ese es el problema. ¡Gracias!
Cafeína Coma
Afaik, PAM es lo que debería leer /etc/security/limits*: puede intentar habilitar PAM solo para verificar esto. Intentaré deshabilitar PAM para ver qué diferencia hace e informaré los resultados. --- ¡Si! ¡Eso es! Con PAM desactivado, mi límite también es 4096, aunque está establecido en 9999 pulg /etc/security/limits.conf.
TomTomTom
4

Este articulo , creo que aborda su problema.

Básicamente, debe usar el comando ulimit para aumentar los recursos disponibles.

Por ejemplo:

Use el siguiente comando para mostrar el número máximo de descriptores de archivo abiertos:

cat /proc/sys/fs/file-max

Para ver los valores hard y soft, emita el comando de la siguiente manera:

# ulimit -Hn
# ulimit -Sn

Para ver los valores físicos y físicos para el usuario httpd o oracle, emita el comando de la siguiente manera:

# su - username

Para corregir el número máximo de archivos, puede aumentar el número máximo de archivos abiertos estableciendo un nuevo valor en la variable del núcleo / proc / sys / fs / file-max de la siguiente manera (inicie sesión como root):

# sysctl -w fs.file-max=100000

El comando anterior fuerza el límite a 100000 archivos. Debe editar el /etc/sysctl.confarchivo y poner la siguiente línea para que después de reiniciar la configuración permanezca como está. Para hacer eso, agregue una directiva de configuración de la siguiente manera:

fs.file-max = 100000

Guarde y cierre el archivo. Los usuarios deben cerrar sesión y volver a iniciarla para que los cambios surtan efecto o simplemente escriba el siguiente comando:

# sysctl -p

Verifique su configuración con el comando:

# cat /proc/sys/fs/file-max

o:

# sysctl fs.file-max

El procedimiento anterior establece los límites de los descriptores de archivo (FD) en todo el sistema, sin embargo, puede limitar httpd(o cualquier otro usuario) al usuario a límites específicos editando el /etc/security/limits.confarchivo editando /etc/security/limits.confy establezca los límites de la siguiente manera:

httpd soft nofile 4096
httpd hard nofile 10240

Luego verifíquelos por:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Si tiene el problema en otras distribuciones de Linux, verifique /etc/pam.d/loginy asegúrese de que esté pam_limits.sohabilitado, p. Ej.

session required pam_limits.so
Brooke Fogg-Wolfe
fuente
2
Hola brooke Desafortunadamente, ya he probado las sugerencias de ese artículo. Aunque el 'ulimit -Hn' era nuevo para mí; imprime 4096, el límite con el que sigo tropezando.
Caffeine Coma
0

Si es un Servicio, puede intentar establecer el límite en /etc/systemd/system/{ServiceName}.serviceagregarLimitNOFILE=65536

Maicon Santana
fuente
Ubuntu 14.04 no usa systemd por defecto.
número5
Ubuntu 16.04, Tomcat 8 funcionó para mí
Arjang