Apache falhando; “Muitos arquivos abertos no sistema”

7

Estou executando o Apache2 com mpm_prefork em um servidor MediaTemple (dv). Nenhuma alteração significativa foi feita na configuração do meu servidor recentemente. O httpd.conf está atualmente configurado para 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 logo 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 com a babá deste servidor para reiniciá-lo quando o Apache falha. Ajuda?

    
por Eric Martindale 05.06.2009 / 03:34

7 respostas

-1

Eu resolvi meu problema adicionando o seguinte em / usr / sbin / apachectl:

ULIMIT_MAX_FILES="ulimit -n 16384"

O problema parece ter se acalmado, pelo menos nas últimas 12 horas.

    
por 05.06.2009 / 14:56
9

Sugiro que você tente adicionar uma linha como esta ulimit -n 16384 ao topo do arquivo / etc / default / apache2 e, em seguida, reinicie.

Veja também este link .

    
por 05.06.2009 / 03:44
4

de 'man proc':

/proc/sys/fs/file-max This file defines a system-wide limit on the number of open files for all processes. (See also setrlimit(2), which can be used by a process to set the per-process limit, RLIMIT_NOFILE, on the number of files it may open.) If you get lots of error messages about running out of file handles, try increasing this value:

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

          The  kernel constant NR_OPEN imposes an upper limit on the

value that may be placed in file-max.

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

increase /proc/sys/fs/inode-max to 3-4 times the new value of /proc/sys/fs/file-max, or you will run out of inodes.

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

presently opened. It contains three numbers: the number of allocated file handles; the number of free file handles; and the maximum number of file handles. The kernel allocates file handles dynamically, but it doesn't free them again. If the number of allocated files is close to the maximum, you should consider increasing the maximum. When the number of free file handles is large, you've encountered a peak in your usage of file handles and you probably don't need to increase the maximum.

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

fs.file-max=512000

Observe que isso define o limite sistema ; o limite por usuário é definido com "ulimit", com o qual você já indicou que estava familiarizado.

    
por 05.06.2009 / 06:29
2

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

    
por 05.06.2009 / 07:16
2

O MediaTemple está usando a tecnologia de virtualização Virtuozzo ? O Virtuozzo é construído sobre o OpenVZ. No OpenVZ existe um limite no número de arquivos abertos. Talvez o seu contêiner tenha atingido o limite?

Execute este comando (se puder):

cat / proc / user_beancounters

e observe os valores do recurso numfile.

    
por 05.06.2009 / 10:10
0

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

    
por 05.06.2009 / 03:42
0

Isso é exatamente o que parece - seu servidor tem mais arquivos abertos do que o kernel está configurado para manipular.

Eu suponho que você tenha um servidor compartilhado? Se você tem root no servidor, você poderia aumentar o limite para o usuário do servidor Web com ulimit -n até o máximo configurado em / proc / sys / fs / file-max, mas para um servidor compartilhado você provavelmente precisará fale com o seu provedor de serviços.

Também é possível que o servidor específico em que você está esteja superlotado, supondo que você o compartilhe. Nesse caso, o MediaTemple precisará embaralhar alguns de você.

Alternativamente, você adicionou novos recursos à sua presença na Web ultimamente ou seu tráfego aumentou muito?

    
por 05.06.2009 / 03:48