Ir al contenido

Demasiados archivos abiertos

Cada proceso en Linux se ejecuta con ciertos límites. Uno de estos límites es la cantidad de archivos y sockets de red que un proceso puede abrir al mismo tiempo. Cuando el límite es demasiado bajo, puedes ver el error Too many open files.

En Astra, este error puede aparecer cuando el límite del sistema no está configurado lo suficientemente alto. Por defecto, si instalaste Astra con el comando astra init (como se describe en nuestra guía de inicio rápido), el límite se establece en 65536 archivos abiertos. Este valor suele ser suficiente para la mayoría de los casos.

Si inicias Astra de otra manera, debes asegurarte de que el límite de archivos abiertos esté configurado correctamente. A continuación se muestran los casos más comunes.

Cuando usas un script init.d, debes aumentar el límite antes de iniciar Astra. Agrega la línea ulimit -n 65536 antes del comando que lanza Astra.

Ejemplo de script:

Ventana de terminal
if [ "$1" = "start" ]; then
/usr/bin/astra -c /etc/astra/astra.conf -p 8000 --pid /var/run/astra.pid --log /var/log/astra.log --daemon
elif [ "$1" = "stop" ]; then
if [ -f /var/run/astra.pid ]; then
kill $(cat /var/run/astra.pid)
fi
elif [ "$1" = "restart" ]; then
$0 stop
sleep 1
$0 start
fi

Para servicios systemd, debes establecer el límite dentro del archivo de servicio. En la sección [Service], agrega:

[Service]
Type=simple
LimitNOFILE=65536
ExecStart=/usr/bin/astra -c /etc/astra/astra.conf -p 8000 --log /var/log/astra.log --no-stdout

Esto asegura que Astra pueda abrir suficientes archivos y sockets sin que aparezca el error.

Puedes comprobar el límite actual de archivos abiertos para un proceso en ejecución usando los comandos ulimit o cat.

Si estás dentro de la misma terminal donde se ejecuta Astra, ejecuta:

Ventana de terminal
ulimit -n

Esto muestra el número máximo de archivos abiertos para esa terminal (y cualquier proceso iniciado desde ella).

Si Astra ya se está ejecutando como un demonio, busca su ID de proceso (PID) y verifica directamente:

Ventana de terminal
pidof astra

Esto devuelve el PID del proceso Astra. Luego ejecuta:

Ventana de terminal
cat /proc/<PID>/limits | grep "open files"

Ejemplo de salida:

Max open files 65536 65536 files