¿Cómo aumento el límite de archivos abiertos para un usuario no root?

144

Esto está sucediendo en Ubuntu Release 12.04 (preciso) 64-bit Kernel Linux 3.2.0-25-virtual

Estoy tratando de aumentar la cantidad de archivos abiertos permitidos para un usuario. Esto es para mi aplicación eclipse java donde el límite actual de 1024 no es suficiente.

De acuerdo con las publicaciones que he encontrado hasta ahora, debería poder poner líneas en

/etc/security/limits.conf así:

soft nofile 4096
hard nofile 4096

para aumentar la cantidad de archivos abiertos permitidos para todos los usuarios.

Pero eso no funciona para mí y creo que el problema no está relacionado con ese archivo.

Para todos los usuarios, el límite predeterminado es 1024, independientemente de lo que se encuentre en /etc/security/limits.conf (reinicié después de cambiar ese archivo)

$ ulimit -n
1024

Ahora, a pesar de las entradas en /etc/security/limits.conf, no puedo aumentar eso:

$ ulimit -n 2048

-bash: ulimit: abrir archivos: no se puede modificar el límite: Operación no permitida La parte extraña es que puedo cambiar el límite hacia abajo , pero no puedo cambiarlo hacia arriba, incluso para volver a un número que está por debajo del límite original:

$ ulimit -n 800
$ ulimit -n
800

$ ulimit -n 900

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

Como root, puedo cambiar ese límite a lo que quiera, arriba o abajo. Ni siquiera parece importarle el límite supuestamente de todo el sistema en / proc / sys / fs / file-max

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

# ulimit -n 188898
# ulimit -n 
188898

Pero incluso si me sale el eclipse para ejecutarlo como root, ¡mi aplicación todavía falla debido a la excepción "Too Many Open File"!

Hasta ahora, no he encontrado ninguna manera de aumentar el límite de archivos abiertos para un usuario no root.

¿Cómo debo hacer esto correctamente? He visto otras publicaciones pero ¡no tuve suerte!

iCode
fuente
66
Además, tenga en cuenta que después de editar /etc/security/limits.conf, es posible que deba cerrar sesión y volver a iniciarla antes de poder usar el nuevo límite máximo. Hice esto, y estaba desconcertado al ulimit -Hsseguir mostrando 1000 cuando lo había elevado a 1000000. Luego me desconecté y volví a ingresar, y ulimit mostró la nueva cantidad.
Cerin
Para la sesión GUI también puede encontrar importante (Ubuntu 16+) este hilo .
Waldemar Wosiński

Respuestas:

142

El ulimitcomando por defecto cambia los límites DUROS, que usted (un usuario) puede reducir, pero no puede aumentar.

Use la opción -S para cambiar el límite SOFT , que puede variar de 0- { HARD }.

De hecho, he alias ulimita ulimit -S, por lo que por defecto a los límites suaves todo el tiempo.

alias ulimit='ulimit -S'

En cuanto a su problema, le falta una columna en sus entradas en /etc/security/limits.conf.

Debería haber CUATRO columnas, pero falta la primera en su ejemplo.

* soft nofile 4096
* hard nofile 4096

La primera columna describe a QUIÉN debe solicitar el límite. '*' es un comodín, es decir, todos los usuarios. Para elevar los límites de root , debe ingresar explícitamente 'root' en lugar de '*'.

También debe editar /etc/pam.d/common-session*y agregar la siguiente línea al final:

session required pam_limits.so
lornix
fuente
1
¿Cómo cambio el límite duro para el número máximo de descriptores de archivo abiertos? Mi problema es que necesito permitir que mi aplicación Eclipse tenga tantos archivos abiertos como quiera, pero el límite de 4096 no es suficiente y quiero configurarlo lo más alto posible, quizás 500000. Mi configuración en los límites.conf es como mencionaste con la estrella y aún así el límite duro no se mueve.
iCode
1
Bueno, descubriste que el valor de / proc / sys / fs / file-max era 188,897 ... Entonces diría que tu límite superior está entre 188,000 (permitido) y 500,000 (no permitido). Confunde la idea de que tiene algo que requiere más de 65000 archivos abiertos simultáneamente. Guau. Por lo general, eso se maneja en hierro grande. Sospecharía de una programación, uh, concepto erróneo. (Con el debido respeto, por favor)
lornix
44
eso fue todo: la sesión requirió pam_limits.so, ¡gracias!
lethalman
13
Al principio me perdí el comodín al final /etc/pam.d/common-session*y solo lo edité common-session, e incluso después de un reinicio no funcionó. Pero después de agregar la misma línea (para pam_limits.so) common-session-noninteractive, se ulimit -nmuestra el nuevo valor después de un nuevo inicio de sesión (no se requiere reiniciar). FWIW Estaba tratando de cambiar el límite para root (solo).
Lambart
1
También verifique si el valor es diferente si está conectado como root. superuser.com/questions/1200539/...
Robbo_UK
20

Si usa límites suaves y duros por usuario, puede usar algo como:

su USER --shell /bin/bash --command "ulimit -n"

para comprobar si su configuración funciona para ese usuario específico o no.

Jeroen Teeuwen
fuente
5

Tengo muchos problemas para que esto funcione.

El uso de lo siguiente le permite actualizarlo independientemente de su permiso de usuario.

sudo sysctl -w fs.inotify.max_user_watches=100000
Layke
fuente
44
Intenté esto porque tengo el mismo problema pero no funcionó$ sudo sysctl -w fs.inotify.max_user_watches=100000 fs.inotify.max_user_watches = 100000 $ ulimit -n 1024
grepmaster