
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.