No se puede aumentar el límite de archivos abiertos más allá de 4096 (Ubuntu)


34

Estoy en Ubuntu 17.04. Intento aumentar el límite de archivos abiertos, y ninguna de las instrucciones que he encontrado en línea está funcionando. Puedo subir a 4096, pero no puedo pasar de eso.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Eso funciona. Esto no:

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

Parece ser debido al límite duro:

$ ulimit -Hn
4096

Intenté agregar estas líneas a /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

También agregué esta línea a /etc/pam.d/common-session y /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Desde que hice eso, reinicié mi computadora. Los cambios en los límites.conf no parecen afectar nada. El límite duro todavía está atascado en 4096, lo que me impide subir más. ¿Cómo aumento mi límite de archivos abiertos?


Aquí hay información adicional de configuración:

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

Respuestas:


56

OK, finalmente descubrí esto. Los límites que estaba estableciendo en /etc/security/limits.conf se aplicaban, pero no se aplicaban al inicio de sesión gráfico. Esto se puede verificar así desde una ventana de terminal:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Más investigación me llevó a este informe de error , que me hizo apuntar en la dirección correcta. Para modificar el límite que utiliza el shell de inicio de sesión, debemos agregar la siguiente línea a /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Ese cambio funciona, pero solo afecta el límite suave. (Dejándonos limitados aún con un límite rígido de 4096). Para afectar también el límite rígido, debemos modificar /etc/systemd/system.conf con el mismo cambio.

Los cambios que hice en /etc/pam.d no fueron necesarios. Al menos en Ubuntu, esto ya está funcionando. Además, no era necesario cambiar la configuración para rooty *en limits.conf. Cambiar los límites para mkasbergfue suficiente, al menos para mi caso de uso.


En resumen

Si desea aumentar el límite mostrado por ulimit -n, debe:

  • Modifique /etc/systemd/user.conf y /etc/systemd/system.conf con la siguiente línea (esto se encarga del inicio de sesión gráfico):

    DefaultLimitNOFILE=65535
    
  • Modifique /etc/security/limits.conf con las siguientes líneas (esto se encarga del inicio de sesión sin GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Reinicie su computadora para que los cambios surtan efecto.


2
DefaultLimitNOFILE=65535Hizo el truco. ¿Pero por qué /etc/security/limits.conf no funciona?
Suvitruf dice Reinstate Monica

66
El inicio de sesión de la GUI usa systemd, que aparentemente tiene su propia configuración ( /etc/systemd/system.conf) que es independiente de la configuración normal para sesiones de terminal ( /etc/security/limits.conf). No sé lo suficiente sobre systemd para saber por qué se implementó de esta manera.
mkasberg

1
@Suvitruf porque se ignora en un sistema systemd . Estoy publicando una respuesta.
Marc.2377

1
Solo quiero señalar que los límites para el rootusuario no pueden ser especificados por *o especificadores de grupo. rootliteral debe especificarse explícitamente.
Petr Javorik

2
Esto funciona para mí, después de un reinicio .
Shihe Zhang

14

No es necesario cambiar nada en el /etc/security/limits.confarchivo, se ignora si está utilizando systemd.

(reproduciendo una respuesta modificada a otra pregunta en la red ...)

Una alternativa para aquellos que prefieren no editar el archivo predeterminado /etc/systemd/system.confy los /etc/systemd/user/confarchivos:

  1. cree un nuevo archivo /etc/systemd/system.conf.d/limits.confcon estos contenidos:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. correr systemctl daemon-reexeccomo root

  3. cerrar sesión y volver a iniciar sesión

  4. verifica tu nuevo límite con ulimit -n.

Consulte la página de systemd-system.confmanual para más detalles.


En mi sistema Ubuntu 18.10, el archivo en cuestión está en /etc/systemd/system.conf. Hacer el cambio allí parece haber hecho el truco, gracias.
Stephen Kennedy

1
Simplemente cerrar sesión para mí no funcionó (Ubuntu 18.04) pero reiniciar funcionó. Solución muy elegante, gracias.
stann1

0

Usando Ubuntu 17.04 obtuve el límite duro descrito:

user@paresh.com:~$ ulimit -Hn
4096

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

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@paresh.com:~$ ulimit -Hn
9999

Espero que esto funcione para ti también.


0
  1. editar /etc/systemd/system/sonar.service

  2. agregue estas dos líneas en Servicio

[Servicio]

LimitMEMLOCK = infinito

LímiteNOFILE = 65535

  1. systemctl daemon-reload
  2. systemctl reiniciar sonar

esto funciona para mi


0

TL; DR Sentí la necesidad de concentrar las respuestas, por lo que son más fáciles de encontrar. Me llevó mucho tiempo reunir todas las piezas para que funcione correctamente ...

Hay 2 lugares a considerar.

  1. Sesión de GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    o mejor aquí:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. entorno de shell

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    o mejor aquí:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Después de alterar la configuración en los archivos anteriores, reinicie y luego verifique los límites con: ulimit -n -Hn -Sn

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.