Arreglando ulimit: archivos abiertos: no se puede modificar el límite: operación no permitida

Arreglando ulimit: archivos abiertos: no se puede modificar el límite: operación no permitida

Probé esto en diferentes instalaciones de GNU/Linux:

perl -e 'while(1){open($a{$b++}, "<" ,"/dev/null") or die $b;print " $b"}'

Sistema A y D

El primer límite que alcancé es 1024. Se puede aumentar fácilmente poniendo esto en /etc/security/limits.conf:

*                hard    nofile          1048576

y luego ejecuta:

ulimit -n 1048576
echo 99999999 | sudo tee /proc/sys/fs/file-max

Ahora la prueba va a 1048576.

Sin embargo, parece que no puedo elevarlo por encima de 1048576. Si pongo 1048577 en limites.conf, simplemente se ignora.

¿Qué está causando eso?

Sistema B

En el sistema BI ni siquiera puedo llegar a 1048576:

echo 99999999 | sudo tee /proc/sys/fs/file-max

/etc/security/limits.conf:

*                hard    nofile          1048576

Aquí obtengo:

$ ulimit -n 65537
bash: ulimit: open files: cannot modify limit: Operation not permitted
$ ulimit -n 65536
#OK

¿De dónde vino ese límite?

Sistema C

Este sistema también tiene el límite 1048576 en limits.conf y 99999999 en /proc/sys/fs/file-max.

Pero aquí el límite es 4096:

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

¿Cómo elevo eso a (al menos) 1048576?

(Nota personal: no lo hagas echo 18446744073709551616 | sudo tee /proc/sys/fs/file-max:)

Respuesta1

Cheque que /etc/ssh/sshd_configcontiene:

UsePAM=yes

y que /etc/pam.d/sshdcontiene:

session    required   pam_limits.so

En el comentario a continuación, @venimus afirma que el límite de 1 millón está codificado:

Los estados fuente del kernel 2.6.x ./fs/file.c:30:int sysctl_nr_open __read_mostly = 1024*1024; que es 1048676

El 1048576 es por proceso. Entonces, al tener múltiples procesos, se puede superar este límite.

información relacionada