¿Cómo aumentar el límite máximo de apertura de archivos de Neo4j (ulimit) en Ubuntu?

78

Actualmente ulimit -nmuestra 10000. Quiero aumentarlo a 40000. He editado "/etc/sysctl.conf" y he puesto fs.file-max=40000. También he editado /etc/security/limits.confy actualizado valores duros y blandos. Pero todavía muestra ulimit 10000. Después de hacer todos estos cambios, reinicié mi computadora portátil. Tengo acceso a la contraseña de root.

usr_name@usr_name-lap:/etc$ /sbin/sysctl fs.file-max
fs.file-max = 500000

Se agregaron las siguientes líneas en /etc/security/limits.conf-

*     soft    nofile          40000
*     hard    nofile          40000

También agregué la siguiente línea en /etc/pam.d/su:

session    required   pam_limits.so

He intentado todas las formas posibles como se indica en otros foros, pero puedo alcanzar un límite máximo de 10000 , no más allá de eso. ¿Cuál puede ser el problema?

Estoy haciendo este cambio porque neo4jarroja límites máximos de archivos abiertos alcanzados.

lo mas duro
fuente
Lo hizo bien, simplemente reinicie el sistema y todo funcionará:sudo ulimit -n 40000
0x90
@ 0x90 Reinicié el sistema. Pero incluso entonces no cambiará.
duro
6
Al ser específico de Ubuntu, probablemente pertenezca a askubuntu.com; una pregunta similar está aquí: askubuntu.com/questions/162229/…
Lambart
1
serverfault.com/questions/610130/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
después de agregar a /etc/security/limits.conf, ¿qué servicio se reiniciará para que el cambio entre en vigencia?
Ashish Karpe

Respuestas:

8

Estoy usando Debian pero esta solución debería funcionar bien con Ubuntu.
Tienes que agregar una línea en el script neo4j-service .
Esto es lo que he hecho:

nano /etc/init.d/neo4j-service
Agregue « ulimit –n 40000 » justo antes de la línea start-stop-daemon en la sección do_start

Tenga en cuenta que estoy usando la versión 2.0 Enterprise Edition. Espero que esto te ayudará.

Martín Larivière
fuente
13
FWIW no existe tal script en Ubuntu Server 14.04. Mi solución se encontró en esta pregunta (y la respuesta de lornix): askubuntu.com/questions/162229/… - en resumen, necesita editar /etc/security/limits.confy/etc/pam.d/common-session*
Lambart
1
Veo que el interrogador original mencionó a neo4j de pasada. Parece que tal vez eso pertenezca al tema de la pregunta, ya que no tiene nada que ver con Ubuntu.
Lambart
En Ubuntu 14.04, realmente hay un /etc/init.d/neo4j-servicearchivo y Martin Larivière tiene razón, insertar uname -n 40000resuelve el problema. No conozco las diferencias entre Ubuntu Server y Ubuntu, así que quizás también tengas razón, agrego esto solo para aclarar que lo que escribió Martin resuelve el problema con Ubuntu 14.04 simple.
Grégoire C
3
@Lambart, en el caso de neo4j-service, el common-session-*truco no funcionará, porque neo4j-service se basa en PAM start-stop-daemony start-stop-daemonno aprovecha en absoluto. De hecho, la única solución es agregar una ulimit -n xxxllamada explícita en el script de inicio.
David Ammouial
2
Esta no es una solución, es una curita.
Tim Wachter
83

Lo que está haciendo no funcionará para el usuario root. Tal vez esté ejecutando sus servicios como root y, por lo tanto, no pueda ver el cambio.

Para aumentar el ulimit para el usuario root, debe reemplazar el *por root.*no aplica para usuarios root. El descanso es el mismo que tú. Lo volveré a citar aquí.

Agregue las siguientes líneas al archivo: /etc/security/limits.conf

root soft  nofile 40000

root hard  nofile 40000

Y luego agregue la siguiente línea en el archivo: /etc/pam.d/common-session

session required pam_limits.so

Esto actualizará el ulimit para el usuario root. Como se mencionó en los comentarios, es posible que ni siquiera tenga que reiniciar para ver el cambio.

Sambhav Sharma
fuente
2
En realidad, no es necesario reiniciar para que el nuevo límite surta efecto. El objetivo de editar el archivo /etc/pam.d/common-session es que la creación de cualquier nueva sesión hará que se procesen los archivos de límites.
Christopher Smith
1
Este procedimiento funciona. No es necesario reiniciar. Simplemente cierre la sesión y vuelva a iniciarla para ver el resultado.
Bill Butler
2
En el caso de neo4j-service o cualquier otro servicio que utilice start-stop-daemon, el common-session-*truco no funcionará, porque start-stop-daemonno aprovecha PAM en absoluto. No hay otra forma que agregar una ulimit -n xxxllamada explícita en algún lugar del script de inicio antes de que se inicie el servicio.
David Ammouial
3
Funcionó maravillosamente en Ubuntu 16.04.1 LTS
Andrew T Finnell
63

1) Verifique el file-maxlímite de sysctl :

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

Si el límite es inferior al valor deseado, abra sysctl.confy agregue esta línea al final del archivo:

fs.file-max = 65536

Finalmente, aplique sysctllímites:

$ sysctl -p 

2) Edite /etc/security/limits.confy agregue debajo lo mencionado

* soft     nproc          65535    
* hard     nproc          65535   
* soft     nofile         65535   
* hard     nofile         65535

Estos límites no se aplicarán al rootusuario, si desea cambiar los rootlímites, debe hacerlo explícitamente:

root soft     nofile         65535   
root hard     nofile         65535
...

3) Reinicie el sistema o agregue la siguiente línea al final de /etc/pam.d/common-session:

session required pam_limits.so

Cierre la sesión y vuelva a iniciar sesión.

4) Verifique los límites suaves:

$ ulimit -a

y límites duros:

$ ulimit -Ha
....

open files                      (-n) 65535

Referencia: http://ithubinfo.blogspot.in/2013/07/how-to-increase-ulimit-open-file-and.html

minhas23
fuente
1
Asegúrese de cerrar sesión y volver a iniciar sesión para que pueda reflejar sus cambios, si no lo está verificando con el usuario root, para ubuntu puede hacerlo antes degnome-session-quit
Mayank Saxena
/ proc / sys / fs / file-max NO ES EL MÁXIMO archivo permitido por el sistema !!! Por ejemplo, en mi sistema, de forma predeterminada, se establece en 1528702. Establecerlo en ese valor para los límites suaves / estrictos en limits.conf no permite al usuario aumentar los límites de 1024 en absoluto. Tuve que establecer limits.conf en algo mucho más conservador, por ejemplo, 256 * 1024 = 262144, y finalmente ulimit -a muestra lo mismo para un usuario normal.
sabujp
3

Tenía el mismo problema y lo hice funcionar agregando entradas a /etc/security/limits.d/90-somefile.conf . Tenga en cuenta que para ver cómo funcionan los límites, tuve que cerrar la sesión por completo de la sesión ssh y luego volver a iniciarla.

Quería establecer el límite para un usuario específico que ejecuta un servicio, pero parece que estaba obteniendo el límite que se estableció para el usuario con el que estaba iniciando sesión. A continuación, se muestra un ejemplo para mostrar cómo se establece ulimit en función del usuario autenticado y no del usuario efectivo:

$ sudo cat /etc/security/limits.d/90-nofiles.conf
loginuser    soft    nofile   10240
loginuser    hard    nofile   10240
root         soft    nofile   10241
root         hard    nofile   10241
serviceuser  soft    nofile   10242
serviceuser  hard    nofile   10242

$ whoami
loginuser
$ ulimit -n
10240
$ sudo -i
# ulimit -n
10240    # loginuser's limit
# su - serviceuser
$ ulimit -n
10240    # still loginuser's limit.

Puede utilizar un *para especificar un aumento para todos los usuarios. Si reinicio el servicio como el usuario que inicié sesión, y agregoulimit -n al script de inicio, veo que los límites del usuario de inicio de sesión inicial están establecidos. No he tenido la oportunidad de verificar qué límites de usuario se utilizan durante el arranque del sistema o de determinar cuál es el límite real de nofile del servicio que estoy ejecutando (que se inicia con start-stop-daemon).

Hay 2 enfoques que están funcionando por ahora:

  1. agregue un ajuste ulimit al script de inicio, justo antes de start-stop-daemon.
  2. comodines o configuraciones ulimit más extensas en el archivo de seguridad.
Brett
fuente
cuando hago lo que hiciste (a partir de whoami), primero obtengo 1024, luego 65536 (para root), luego 65536 para usuario. Pero el primero fue el mismo usuario. ¿Tiene una explicación para esto? Estoy desconcertado
Danielson
Eso suena extraño. ¿Cómo se cambia de usuario a root y de nuevo a usuario? ¿Cerró la sesión por completo después de configurar el archivo? Es posible que inicialmente esté en una sesión en caché y luego use una nueva sesión dependiendo de cómo se comunique con el usuario.
Brett
Sigo reiniciando, solo para estar seguro. También probé la configuración /etc/sysctl.conf-> fs.file-max = 1000000debería arreglarlo globalmente para todos los usuarios, tampoco ningún resultado. Es como si un proceso me estuviera ignorando. Cambio de usuario a root a usuario, como usted describió, de root -> user using su - my_user_name. Lo que indica que el sistema sabe lo que debe usar para ese usuario, pero no ...
Danielson
2

Puede modificar el script de inicio para neo4jhacer un ulimit -n 40000antes de ejecutar neo4j.

Sin embargo, no puedo evitar sentir que estás ladrando al árbol equivocado. ¿ neo4jNecesita legítimamente más de 10,000 descriptores de archivos abiertos? Esto suena muy parecido a un error en neo4jla forma en que lo está utilizando. Trataría de abordar eso.

abligh
fuente
Empiezo a neo4jusar neo4j start. ¿Dónde puedo encontrar el script de inicio?
duro
intente escribir ulimit -n 40000antesneo4j start
abligh
2

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

Editar

Acabo de ver esto de otro usuario también en otro sitio de stackexchange (ambos funcionan, pero esta versión actualiza permanentemente la configuración del sistema, en lugar de temporalmente):

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; 
sudo sysctl -p
Layke
fuente
2

Intente ejecutar este comando, creará un *_limits.confarchivo bajo/etc/security/limits.d

echo "* soft nofile 102400" > /etc/security/limits.d/*_limits.conf && echo "* hard nofile 102400" >> /etc/security/limits.d/*_limits.conf

Simplemente salga de la terminal e inicie sesión nuevamente y verifique ulimit -nque se establecerá para * usuarios

Mahattam
fuente
Respuesta fácil y útil.
sumanth
2

tl; dr establece tanto los límites suaves como los estrictos

Estoy seguro de que funciona según lo previsto, pero lo agregaré aquí por si acaso. Para completar, el límite se establece aquí (consulte la sintaxis a continuación): /etc/security/limits.conf

some_user       soft    nofile          60000
some_user       hard    nofile          60000

y activado con lo siguiente en /etc/pam.d/common-session:

session required pam_limits.so

Si establece solo el límite estricto, ulimit -amostrará el predeterminado (1024): Si establece solo el límite suave, el límite ulimit -a mostrará (4096)

Si los configura, ambos ulimit -amostrarán el límite suave (hasta el límite estricto, por supuesto)

jorfus
fuente
2

Lo hice asi

echo "NEO4J_ULIMIT_NOFILE=50000" >> neo4j
mv neo4j /etc/default/
bigkahunaburger
fuente
1

Configuración ULIMIT:

  1. Iniciar sesión por root
  2. vi seguridad / límites.conf
  3. Hacer entrada debajo

    Inicio de configuración de Ulimit para el usuario del sitio web

    website   soft   nofile    8192
    website   hard   nofile    8192
    website   soft   nproc    4096
    website   hard   nproc    8192
    website   soft   core    unlimited
    website   hard   core    unlimited
    
  4. Haga la entrada a continuación para TODOS LOS USUARIOS

    Configuración de Ulimit para cada usuario

    *   soft   nofile    8192
    *   hard   nofile    8192
    *   soft   nproc    4096
    *   hard   nproc    8192
    *   soft   core    unlimited
    *   hard   core    unlimited
    
  5. Después de modificar el archivo, el usuario debe cerrar la sesión y volver a iniciar sesión para ver los nuevos valores.

Sandeep kr gupta
fuente