Cómo solucionar el error “Too many open files (errno: 24) “o “Can’t open file (errno: 24)” de MySQL

Se trata de un error bastante común y a la vez un buen quebradero de cabeza.

Esto es debido a que que mysqld está tratando de mantener abiertos demasiados archivos simultáneamente.

Para resolverlo basta con modificar el numero de ficheros abiertos en la variable open_files_limit.

Primero realizaremos la siguiente consulta pra saber cual es el limit actual:

SHOW VARIABLES LIKE 'open%';

Pongamos que nos devuelve 20000, pues lo que haremos sera modificar el limite a 40000.

Primero lo haremos editando el fichero de configuración de mysql /etc/my.cnf :

[mysqld]
open_files_limit = 40000

Después editamos el fichero del sistema, /etc/security/limits.conf  y añadimos el mismo límite :

mysql soft nofile 40000
mysql hard nofile 40000

A continuación reiniciamos el servicio mysql, y el error dejara de mostrarse y solo habra que cambiar la configuración segun las necesidades de la aplicación.

¿Como listar el tamaño de los directorios en linux?

En servidores linux es muy común quedarse sin espacio y volverse loco intentando buscar el fichero o directorio que nos esta ocupando el espacio.

Para ver cual es el directorio que nos esta haciendo la puñeta vamos a utilizar el comando du (disk usage).

Para el ejemplo usaremos el directorio /var/www/html, donde hay ubicados varios proyectos web.

Si utilizamos el comando du -h /var/www/html (añadimos -h para verlo en formato humano) nos encontramos con el problema de que nos muestra el tamaños de los directorios, subdirectorios y todo lo que se encuentra y eso no es lo que queremos.

du -h /var/www/html

20K     ./joomla_prueba/plugins/user/joomla
8.0K    ./joomla_prueba/plugins/user/profile/profiles
12K     ./joomla_prueba/plugins/user/profile/field
52K     ./joomla_prueba/plugins/user/profile
16K     ./joomla_prueba/plugins/user/contactcreator
124K    ./joomla_prueba/plugins/user

Para resolver esto añadimos la opción –max-depth=1 que nos limita la busqueda al primer directorio.

du -h --max-depth=1 /var/www/html

250M    ./pepino
154M    ./web_equipo
140M    ./tacita
195M    ./drbones
100M    ./alienta
164M    ./vibora
530M    ./bosque
220M    ./valiente
59M     ./drupal
289M    ./fundacionlobos


Esto comando ya nos gusta mas, ya que nos muestra el tamaño de lo directorios.

Como ultima opción lo podemos ordenar añadiendo un sort -n (-n ordena por numero), en el caso de ser un listado muy extenso.

du -h --max-depth=1 /var/www/html | sort -n

59M     ./drupal
100M    ./alienta
140M    ./tacita
154M    ./web_equipo
164M    ./vibora
195M    ./drbones
220M    ./valiente
250M    ./pepino
289M    ./fundacionlobos
530M    ./bosque