Estou tentando configurar um servidor web em um VPS. Meu problema é que o uso de memória dos processos php-cgi aumenta com o tempo, mesmo que o site não esteja recebendo nenhum tráfego. (está por trás de um firewall por enquanto)
O VPS possui 360 MB de RAM. Estou usando o Debian Lenny 32bit e seus pacotes lighttpd e php5-cgi. Além de algumas mudanças na configuração (listadas abaixo), estou usando a configuração de estoque do Debian.
O site é baseado no Drupal. Usando o módulo devel do Drupal, posso dizer que o uso de memória dos scripts PHP é inferior a 20 KB, em média, e nunca excede 8 MB.
Aqui estão as partes relevantes da saída de ps aux
:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
www-data 29871 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29873 0.0 7.4 65808 27468 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29874 0.0 3.7 55808 13736 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29875 0.0 4.3 58040 16204 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29876 0.0 4.4 57444 16288 ? S Aug12 0:00 /usr/bin/php-cgi
www-data 29877 0.0 1.7 54552 6368 ? Ss Aug12 0:00 /usr/bin/php-cgi
www-data 29879 0.0 9.6 67140 35684 ? S Aug12 0:26 /usr/bin/php-cgi
www-data 29880 0.0 6.6 59172 24492 ? S Aug12 0:23 /usr/bin/php-cgi
www-data 29881 0.0 7.1 59784 26388 ? S Aug12 0:22 /usr/bin/php-cgi
www-data 29882 0.0 7.4 60880 27440 ? S Aug12 0:23 /usr/bin/php-cgi
- É normal ter php-cgi tão grande?
- É possível estimar o uso da memória php-cgi com base nas configurações?
- Alguma dica para reduzir o consumo de memória dos processos php-cgi?
A procura de erros conhecidos de vazamento de memória não resultou em nada relevante. E eu ficaria surpreso se os pacotes / configurações padrão do Debian tivessem um vazamento de memória tão óbvio. Outros usuários no mesmo host não têm esse problema.
O que eu fiz até agora é definido PHP_FCGI_MAX_REQUESTS
como um valor baixo, para que os processos php-cgi sejam reciclados rapidamente. Quando eu uso ab
para simular alta carga, isso funciona muito bem. Os processos morrem rapidamente antes de crescerem acima de 10 MB. No entanto, sob carga baixa a média, todos os processos crescem constantemente (devido ao balanceamento de carga) e a maioria deles consome 28 MB + simultaneamente, colocando meu VPS em risco de troca. Observe que, mesmo sem nenhum tipo de tráfego, os processos crescem constantemente.
Posso reduzir o número de processos php-cgi, mas isso parece mais uma solução alternativa do que uma correção. Eu ficaria surpreso se o php-cgi normalmente crescesse assim.
Além disso, a soma do número total de RSS dos processos php-cgi fornece:
$ ps -C php-cgi -o rss= | awk '{s+=$1}END{print s/1024}'
195.738
No entanto, free -m
fornece a seguinte saída:
total used free shared buffers cached
Mem: 360 351 8 0 33 190
-/+ buffers/cache: 127 232
Swap: 255 0 255
- Estou esquecendo de algo? Por que a memória usada (sem buffers) é menor que a memória residente total dos processos php-cgi no host?
Eu tenho as seguintes extensões PHP:
php5-cgi php5-common php5-curl php5-gd php5-mysql php5-xcache
xcache.size
está definido para 24 milhões. Costumava ser 32 milhões, mas reduzi-lo não ajudou. xcache.var_size
está definido como 0. Os demais plug-ins estão usando a configuração de estoque. As páginas de administração do xcache mostram que o xcache está usando menos de 1 MB.
O PHP memory_limit
está definido para 32 milhões.
Aqui está minha configuração do FastCGI:
fastcgi.server = ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 2,
"idle-timeout" => 20,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "1000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
Estou usando mais ou menos o estoque lighttpd.conf
que acompanha o Debian.
Informe-me se houver outros dados que eu possa fornecer.
Qualquer ajuda é apreciada. Estou tentando solucionar isso há dias. Eu fiquei sem idéias.