Header Ads

Establecer ulimit-n para archivos abiertos

El límite por defecto de 1024 para archivos abiertos a veces puede ser un problema en Linux. Podemos aumentarlo así:
ulimit -n
1024
ulimit -n 65535
ulimit -n
65535
Pero este cambio se pierde al reiniciar. Para hacerlo permanente, al menos en Ubuntu, según medium, se soluciona así (en el ejemplo cambiaremos 1024 a 65535):
# Editamos:
/etc/pam.d/common-session
# Y agregamos:
session required    pam_limits.so
# Editamos:
/etc/security/limits.conf
# Y agregamos:
* soft  nproc   65535
* hard  nproc   65535
* soft  nofile  65535
* hard  nofile  65535
root soft   nproc   65535
root hard   nproc   65535
root soft   nofile  65535
root hard   nofile  65535
# Editamos:
/etc/sysctl.conf
# Y agregamos:
fs.file-max = 65535
net.core.somaxconn = 65535
Pero esto no es suficiente para que funcione en LTS 20.04 (Bug 1627769). 
Ahora ya no es necesario agregar la línea a "common-session" y en su reemplazo editamos los siguientes archivos (el resto queda igual):
# Editamos los archivos:
/etc/systemd/system.conf
/etc/systemd/user.conf
# Y agregamos en ambos la línea:
DefaultLimitNOFILE=65535
También podemos hacer toda la operación directamente en consola con un bash script (lo guardamos como ulimit.sh y ejecutamos):
sudo chmod +x ulimit.sh && sudo ./ulimit.sh
Contenido:
#!/bin/bash
# change value for your limit open files:
openfiles="65535"
# backup .conf files:
cp -f /etc/security/limits.conf{,.bak}
cp -f /etc/systemd/system.conf{,.bak}
cp -f /etc/systemd/user.conf{,.bak}
cp -f /etc/sysctl.conf{,.bak}
# adding parameters
sh -c 'echo "* soft  nproc   '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "* hard  nproc   '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "* soft  nofile  '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "* hard  nofile  '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "root  soft  nproc   '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "root  hard  nproc   '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "root  soft  nofile  '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "root  hard  nofile  '$openfiles'" >> /etc/security/limits.conf'
sh -c 'echo "DefaultLimitNOFILE='$openfiles'" >> /etc/systemd/system.conf'
sh -c 'echo "DefaultLimitNOFILE='$openfiles'" >> /etc/systemd/user.conf'
sh -c 'echo "fs.file-max = '$openfiles'" >> /etc/sysctl.conf'
sh -c 'echo "net.core.somaxconn = '$openfiles'" >> /etc/sysctl.conf'
Reiniciamos y finalmente ejecutamos el comando ulimit y vemos los resultados:
ulimit -Ha | grep open
open files  (-n) 65535
ulimit -Sa | grep open
open files  (-n) 65535
ulimit -n
65535
Imagen cortesía de: bytelearning
Fuentes consultadas: mkasbergcyberciti
Con la tecnología de Blogger.