Apache travando; "Muitos arquivos abertos no sistema"

Apache travando; "Muitos arquivos abertos no sistema"

Estou executando o Apache2 com mpm_prefork em um servidor MediaTemple (dv). Nenhuma alteração significativa foi feita recentemente na configuração do meu servidor. httpd.conf está atualmente definido como o seguinte:

MaxKeepAliveRequests 200
KeepAliveTimeout 15

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

Mas estou recebendo o seguinte erro pouco antes de uma falha completa do 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)

Estou ficando irritado por cuidar deste servidor para reiniciá-lo quando o Apache travar. Ajuda?

Responder1

Eu sugiro que você tente adicionar uma linha como estaulimit -n 16384para o topo do arquivo /etc/default/apache2e depois reiniciando.

Veja também issolink.

Responder2

de 'man proc':

/proc/sys/fs/arquivo-max Este arquivo define um limite para todo o sistema no número de arquivos abertos para todos os processos. (Veja também setrlimit(2), que pode ser usado por um processo para definir o limite por processo, RLIMIT_NOFILE, no número de arquivos que ele pode abrir.) Se você receber muitas mensagens de erro sobre a falta de identificadores de arquivo, tente aumentando este valor:

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

          The  kernel constant NR_OPEN imposes an upper limit on the

valor que pode ser colocado no arquivo-max.

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

aumente /proc/sys/fs/inode-max para 3-4 vezes o novo valor de /proc/sys/fs/file-max, ou você ficará sem inodes.

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

atualmente aberto. Ele contém três números: o número de identificadores de arquivo alocados; o número de identificadores de arquivo livres; e o número máximo de identificadores de arquivo. O kernel aloca identificadores de arquivo dinamicamente, mas não os libera novamente. Se o número de arquivos alocados estiver próximo do máximo, considere aumentar o máximo. Quando o número de identificadores de arquivo livres é grande, você encontrou um pico no uso de identificadores de arquivo e provavelmente não precisará aumentar o máximo.

Vale a pena olhar o segundo número para ver se o primeiro número é o que você precisa aumentar. Nesse caso, você pode configurá-lo em seu /etc/sysctl.conf com:

fs.file-max=512000

Observe que isso define osistemalimite; o limite por usuário é definido com 'ulimit', com o qual você já indicou estar familiarizado.

Responder3

Verifique lsof para ver o que realmente está acontecendo. Exceder um limite excessivamente alto geralmente ocorre devido a um vazamento ou outro bug.

Responder4

Tente executar "ulimit -n 8192" antes de iniciar o Apache. Provavelmente está atingindo o limite máximo de arquivos abertos.

informação relacionada