Apache falla; "Demasiados archivos abiertos en el sistema"

Apache falla; "Demasiados archivos abiertos en el sistema"

Estoy ejecutando Apache2 con mpm_prefork en un servidor MediaTemple (dv). No se han realizado cambios significativos en la configuración de mi servidor recientemente. httpd.conf está actualmente configurado en lo siguiente:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

<IfModule prefork.c>
    StartServers           10
    MinSpareServers        10
    MaxSpareServers        10
    MaxClients            200
    MaxRequestsPerChild   4000
</IfModule>

Pero recibo el siguiente error justo antes de que se produzca un fallo total de Apache:

[Thu Jun 04 18:30:24 2009] [warn-phpd] mmap cache can't open /var/www/vhosts/mydomain.com/httpdocs/filename.php - Too many open files in system (pid 19873)

Me estoy molestando por tener que cuidar este servidor para reiniciarlo cuando Apache falla. ¿Ayuda?

Respuesta1

Te sugiero que intentes agregar una línea como esta.ulimit -n 16384al principio del archivo /etc/predeterminado/apache2y luego reiniciando.

También mira estoenlace.

Respuesta2

de 'man proc':

/proc/sys/fs/archivo-max Este archivo define un límite en todo el sistema en la cantidad de archivos abiertos para todos los procesos. (Consulte también setrlimit(2), que puede ser utilizado por un proceso para establecer el límite por proceso, RLIMIT_NOFILE, en la cantidad de archivos que puede abrir). Si recibe muchos mensajes de error sobre quedarse sin identificadores de archivos, intente aumentando este valor:

          echo 100000 > /proc/sys/fs/file-max

          The  kernel constant NR_OPEN imposes an upper limit on the

valor que se puede colocar en file-max.

          If you  increase  /proc/sys/fs/file-max,  be  sure  to 

aumente /proc/sys/fs/inode-max a 3-4 veces el nuevo valor de /proc/sys/fs/file-max, o se quedará sin inodos.

   **/proc/sys/fs/file-nr**
          This (read-only)  file  gives  the  number  of  files 

actualmente abierto. Contiene tres números: el número de identificadores de archivos asignados; el número de identificadores de archivos libres; y el número máximo de identificadores de archivos. El kernel asigna identificadores de archivos dinámicamente, pero no los libera nuevamente. Si la cantidad de archivos asignados está cerca del máximo, debería considerar aumentar el máximo. Cuando la cantidad de identificadores de archivos libres es grande, habrá encontrado un pico en su uso de identificadores de archivos y probablemente no necesite aumentar el máximo.

Vale la pena mirar el segundo número para ver si el primer número es lo que necesita aumentar. Si es así, puedes configurarlo en tu /etc/sysctl.conf con:

fs.file-max=512000

Tenga en cuenta que esto establece elsistemalímite; el límite por usuario se establece con 'ulimit', con el que ya indicó que estaba familiarizado.

Respuesta3

Verifique lsof para ver qué está pasando realmente. Exceder un límite excesivamente alto a menudo se debe a una fuga u otro error.

Respuesta4

Intente ejecutar "ulimit -n 8192" antes de iniciar Apache. Probablemente esté alcanzando el límite máximo de archivos abiertos.

información relacionada