Estou tentando configurar um servidor da 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 tráfego algum. (está por trás de um firewall por enquanto)
O VPS tem 360MB de RAM. Estou usando o Debian Lenny 32bit e seus pacotes lighttpd e php5-cgi. Além de algumas mudanças de configuração (listadas abaixo), estou usando a configuração de estoque pelo Debian.
O site é baseado no Drupal. Usando o módulo de desenvolvimento do Drupal, eu posso dizer que o uso de memória de scripts PHP é menor que 20KB em média, e nunca excede 8MB.
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 o php-cgi tão grande?
- É possível estimar o uso da memória do php-cgi com base nas configurações?
- Alguma dica para reduzir o consumo de memória dos processos php-cgi?
A pesquisa de bugs com vazamentos de memória conhecidos não resultou em nada relevante. E eu ficaria surpreso se os pacotes / config 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 foi definir PHP_FCGI_MAX_REQUESTS
como um valor baixo para que os processos php-cgi sejam reciclados rapidamente. Quando eu uso ab
para simular carga alta, isso funciona muito bem. Os processos morrem rapidamente antes de crescerem mais de 10MB. No entanto, sob carga de 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. Por favor, note que, mesmo sem qualquer tipo de tráfego, os processos crescem de forma constante.
Eu posso reduzir o número de processos php-cgi, mas isso parece mais uma solução 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 sentindo falta de algo? Como é que a memória usada (sem buffers) é menor que a memória total residente 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 como 24M. Costumava ser 32M, mas reduzi-lo não ajudou. xcache.var_size
está definido como 0. Os plug-ins restantes 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.
memory_limit
do PHP está definido como 32M.
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 vem com o Debian.
Por favor, deixe-me saber se há outros dados que eu possa fornecer.
Qualquer ajuda é apreciada. Eu tenho tentado solucionar isso por dias. Eu fiquei sem ideias.