Ulimit creciente en CentOS

18

Tenemos un cuadro de CentOS que estoy tratando de aumentar el número máximo de archivos que un usuario puede tener abierto. Actualmente cuando corro ulimit -Snme sale 1024y ulimit -Hnda 4096. Necesito ese número alrededor de 6000.

En que /etc/sysctl.confme he puesto fs.file-max = 100000. En /etc/security/limits.conftengo el siguiente conjunto:

username soft nofile 6000
username hard nofile 65535

Me desconecté y volví a iniciar sesión como usernamepero todavía no veo mis cambios. ¿Qué necesito para cambiar este valor?

Todo lo que tengo en /etc/security/limits.des 90-nproc.conf. También me aseguré de que no se llame a ulimit en mi .bash_profile o .bashrc.

Cuando lo ejecuto sysctl -pescupe la configuración que quiero y muestra el valor fs.file-maxque quiero. Pero cuando corro ulimit -Sn, obtengo 1048. Si trato de correr sysctl --system, obtengo error: Unknown parameter "--system".

tubaguy50035
fuente
¿Intentaste reiniciar? Hasta donde yo sé, esas configuraciones se leen durante el arranque del sistema.
Kamil
No necesita reiniciar para eso.
Xavier Lucas

Respuestas:

14

Para forzar /etc/sysctl.confa ser leído nuevamente, ejecute sysctl -p.

El archivo /etc/security/limits.confse lee mediante shells de inicio de sesión y debe cerrar las ventanas de las sesiones activas si está en la GUI. Para inicios de sesión remotos, surte efecto en el relog.

Xavier Lucas
fuente
1
Corrió eso, todavía no veo cambios después de un relog.
tubaguy50035
@ tubaguy50035 fs.file-maxes el número máximo de archivos abiertos en el sistema. Es un límite difícil y no se verá reflejado por las ulimitllamadas en su caso.
Xavier Lucas
Ah, vale. ¿No debería estar corriendo con demasiados archivos abiertos entonces?
tubaguy50035
@ tubaguy50035 No relacionado. Es el límite rígido del sistema el que anulará cualquier número anterior en los límites.conf. Pero limit.conf sigue siendo lo que se aplica. ¿Podría intentar establecer los límites rígidos y flexibles con ulimit directamente en una nueva sesión y ver si obtiene los mismos máximos? Algo parece anular su configuración.
Xavier Lucas
Dice que la operación no está permitida. ¿Necesito darle al usuario acceso a algo? Prefiero que el usuario web no tenga privilegios de root.
tubaguy50035
6

Como ha dicho otro póster, necesita que sysctl establezca el valor en el kernel en ejecución. Hay varias formas de establecer el valor sin reiniciar:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

En mi humilde opinión, el último método es el mejor, ya que replica el orden en que se aplicaría la configuración durante el arranque (y, por lo tanto, si tiene un conflicto, se hará evidente).

Nota: No estoy seguro de qué versión de CentOS está usando, pero al menos en 7 me he encontrado con un problema en el que si dracut reconstruye initramfs por algún motivo (como al instalar un nuevo módulo de kernel) se copiará el contenido de /etc/sysctl.* en initramfs, que luego será ejecutado por systemd-sysctl durante esa fase, incluso si luego elimina esas entradas de /etc/sysctl.conf.

En mi entorno, he editado el módulo systemd dracut para excluir /etc/sysctl.* de ese entorno (ya que esas configuraciones se establecerán una vez que se monte el rootfs y se ejecute systemd-sysctl nuevamente). Es solo un problema con el que podrías toparte.

Boscoe
fuente
Estoy en CentOS 6.5. También actualicé mi pregunta con resultados de algo de eso.
tubaguy50035