Introducción: Desafíos como el número de archivos abiertos en cualquier entorno de producción se han vuelto comunes hoy en día. Dado que muchas aplicaciones basadas en Java y Apache se están instalando y configurando, lo que puede llevar a demasiados archivos abiertos, descriptores de archivos, etc. Si esto excede el límite predeterminado establecido, es posible que se enfrenten a problemas de control de acceso y desafíos de apertura de archivos. Muchos entornos de producción se paralizan debido a esto.
Afortunadamente, tenemos el comando «ulimit» en cualquiera de los servidores basados en Linux, mediante el cual se puede ver/establecer/obtener el número de archivos abiertos Este comando está equipado con muchas opciones y con esta combinación se puede establecer el número de archivos abiertos. Los siguientes son comandos paso a paso con ejemplos explicados en detalle.
Para ver cuál es el límite de archivos abiertos actual en cualquier sistema Linux
Para obtener el límite de archivos abiertos en cualquier servidor Linux, ejecute el siguiente comando,
# cat /proc/sys/fs/file-max146013
El número anterior muestra que el usuario puede abrir el archivo ‘146013’ por sesión de inicio de sesión de usuario.
# cat /proc/sys/fs/file-max149219# cat /proc/sys/fs/file-max73906
Esto indica claramente que los sistemas operativos Linux individuales tienen un número diferente de archivos abiertos. Esto se basa en dependencias y aplicaciones que se ejecutan en los sistemas respectivos.
comando ulimit :
Como su nombre indica, ulimit (límite de usuarios) se utiliza para mostrar y establecer el límite de recursos para el usuario que ha iniciado sesión.Cuando ejecutamos el comando ulimit con la opción-a, imprimirá el límite de todos los recursos para el usuario que ha iniciado sesión. Ahora vamos a ejecutar «ulimit-a» en Ubuntu / Debian y CentOS sistemas,
Ubuntu / Debian,
shashi@Ubuntu ~}$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 5731max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024 pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 5731virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
Sistema CentOS
shashi@centos ~}$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 5901max locked memory (kbytes, -l) 64max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 5901virtual memory (kbytes, -v) unlimitedfile locks (-x) unlimited
Como podemos ver aquí OS diferentes tienen diferentes límites establecidos. Todos estos límites se pueden configurar / cambiar usando el comando» ulimit».
Para mostrar el límite de recursos individual, pase el parámetro individual en el comando ulimit, algunos de los parámetros se enumeran a continuación:
- ulimit-n –> Mostrará el límite del número de archivos abiertos
- ulimit-c –> Mostrará el tamaño del archivo principal
- umilit-u –> Mostrará el límite máximo de procesos de usuario para el usuario que ha iniciado sesión.
- ulimit -f –> se mostrará el tamaño máximo de archivo que el usuario puede tener.
- umilit-m- > Mostrará el tamaño máximo de memoria para el usuario que ha iniciado sesión.
- ulimit –v – > Mostrará el límite máximo de tamaño de memoria
Utilice los comandos siguientes Para comprobar los límites duros y blandos del número de archivos abiertos para el usuario que ha iniciado sesión
shashi@Ubuntu ~}$ ulimit -Hn1048576shashi@Ubuntu ~}$ ulimit -Sn1024
¿Cómo solucionar el problema cuando se alcanzó el límite de número máximo de archivos ?
Asumamos que nuestro servidor Linux ha alcanzado el límite del número máximo de archivos abiertos y queremos extender ese límite a todo el sistema, por ejemplo, queremos establecer 100000 como límite del número de archivos abiertos.
Use el comando sysctl para pasar fs.parámetro file-max para kernel sobre la marcha, ejecute el comando debajo como usuario root,
root@ubuntu~]# sysctl -w fs.file-max=100000fs.file-max = 100000
Los cambios anteriores estarán activos hasta el siguiente reinicio, por lo que para que estos cambios sean persistentes durante el reinicio, edite el archivo /etc/sysctl.conf y agregue el mismo parámetro,
root@ubuntu~]# vi /etc/sysctl.conffs.file-max = 100000
guarde y salga del archivo,
Ejecute el comando debajo para hacer que los cambios anteriores entren en vigor inmediatamente sin cerrar sesión ni reiniciar.
root@ubuntu~]# sysctl -p
Ahora verifique si los nuevos cambios están en vigor o no.
root@ubuntu~]# cat /proc/sys/fs/file-max100000
Use el siguiente comando para averiguar cuántos descriptores de archivo se están utilizando actualmente:
# more /proc/sys/fs/file-nr1216 0 100000
Nota:- El comando «sysctl-p» se usa para confirmar los cambios sin reiniciar ni cerrar sesión.
Establecer límite de recursos a nivel de usuario a través de límite.archivo conf
» / etc / sysctl.conf » el archivo se usa para establecer límites de recursos en todo el sistema, pero si desea establecer límites de recursos para usuarios específicos como Oracle, MariaDB y Apache, esto se puede lograr a través de «/etc/security/limits.conf archivo».
Límite de muestra.conf se muestra a continuación,
root@ubuntu~]# cat /proc/sys/fs/file-max
Supongamos que queremos establecer un límite duro y suave en el número de archivos abiertos para para el usuario de linuxtechi y para el usuario de oracle, establezca un límite duro y suave en el número de procesos abiertos, edite el archivo «/etc/security/limits.conf «y agregue las siguientes líneas
# hard limit for max opened files for linuxtechi userlinuxtechi hard nofile 4096# soft limit for max opened files for linuxtechi userlinuxtechi soft nofile 1024# hard limit for max number of process for oracle useroracle hard nproc 8096# soft limit for max number of process for oracle useroracle soft nproc 4096
Save & salga del archivo.
Nota: En caso de que desee poner límite de recursos en un grupo en lugar de usuarios, también puede ser posible a través de límite.archivo conf , en lugar de nombre de usuario, escriba @<nombre_grupo> y el resto de los elementos serán los mismos, se muestra un ejemplo a continuación,
# hard limit for max opened files for sysadmin group@sysadmin hard nofile 4096 # soft limit for max opened files for sysadmin group@sysadmin soft nofile 1024
Verifique si los nuevos cambios están en vigor o no,
~]# su - linuxtechi~]$ ulimit -n -H4096~]$ ulimit -n -S1024~]# su - oracle~]$ ulimit -H -u8096~]$ ulimit -S -u4096
Nota: Otro comando utilizado principalmente es «lsof», que se usa para averiguar «cuántos archivos se abren actualmente». Este comando es muy útil para los administradores.
Conclusión:
Como se mencionó en la sección de introducción, el comando «ulimit» es muy potente y ayuda a configurar y asegurarse de que las instalaciones de aplicaciones sean más fluidas sin cuellos de botella. Este comando ayuda a solucionar muchas de las limitaciones de archivos en servidores basados en Linux.