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.
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?
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 .
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.
Verifique o lsof para ver o que realmente está acontecendo. Exceder um limite excessivamente alto é geralmente devido a um vazamento ou outro bug.
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.
Tente executar "ulimit -n 8192" antes de iniciar o apache. Provavelmente está correndo no limite máximo de arquivos abertos.
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?
Tags linux apache-2.2 centos