processos Apache httpd e PHP sem memória

4

Eu tenho um VPS executando o apache-php-mysql no centos e um único site drupal instalado. O VPS tem 256MB de RAM (pode ser a causa de todos os meus problemas ... talvez eu só precise de mais). Sempre que eu tento abrir meu site de várias abas do navegador (cerca de 8 ... não 800) de uma só vez, o Apache falha! Eu tenho isso no log:

[Wed Oct 24 11:26:31 2012] [error] [cliente xxx] PHP Erro fatal: Sem memória (alocado 28049408) (tentou alocar 201335 bytes) em xxx na linha 2139, referenciador: xxx

Eu li muitos posts aqui, mas acho que há algo fundamental que estou perdendo - Se eu entendi corretamente algum script php tentou alocar 200K após a alocação de 28MB, e não consegue fazê-lo.

A primeira pergunta é: isso deve fazer com que o apache falhe?

Em seguida, tentei ver o comando 'top' enquanto faço meu pequeno teste. Na verdade, vejo 7 processos httpd, cada um reservando cerca de 30MB - o que explica por que minha memória RAM se esgota.

Como evito que o apache crie novos processos até ficar sem memória?

Eu tentei configurar o /etc/httpd/conf/httpd.conf assim:

<IfModule prefork.c>
StartServers       1
MinSpareServers    1
MaxSpareServers    1
ServerLimit        1
MaxClients         1
MaxRequestsPerChild  100
</IfModule>

Mas obtivemos o mesmo resultado exato!

O que estou perdendo?

Muito obrigado!

Atualização:

Meu PHP memory_limit é 128M (confirmado pelas páginas admin do drupal ...) A saída de free -m:

             total       used       free     shared    buffers     cached
Mem:           256        226         29          0          0          0
-/+ buffers/cache:        226         29
Swap:            0          0          0

O que posso fazer para que o apache consuma menos memória? Não posso economizar memória em detrimento de respostas mais lentas?

    
por Ofri 24.10.2012 / 18:52

1 resposta

2

Dependendo da sua versão do Drupal: o núcleo do Drupal 6 requer que o memory_limit do PHP tenha pelo menos 16MB. O núcleo do Drupal 7 requer 32MB.

Com base no erro e na sua postagem que você alocou 28MB, confirme no arquivo php.ini que memory_limit está definido corretamente. Certifique-se de reiniciar o Apache para aplicar quaisquer alterações no php.ini.

Outro aspecto a considerar são os outros serviços que estão sendo executados em seu servidor, Apache, MySQL, etc. Eles também levam do total de 256MB.

Para ter uma ideia sobre o uso de memória atual, você pode digitar:

free -m

O sinalizador -m exibe os dados em MB. A opção -b exibe a quantidade de memória em bytes; a opção -k (configurada por padrão) exibe em kilobytes.

Você receberá uma saída como:

total       used       free     shared    buffers     cached
Mem:         24031      22512       1518        0       1614       8082
-/+ buffers/cache:      12815      11215
Swap:        31999        485      31514

Dependendo da memória disponível, você pode começar a restringir o problema para o PHP ou se tiver superado / excedido o VPS.

EDITAR

@Ofri,

Não há ciência exata para a configuração do Apache. Tudo se resume a conhecer as especificações da máquina e principalmente a avaliação & erro. Monitorar o desempenho do servidor durante os períodos de avaliação e erro em andamento é importante para que você possa ver o impacto positivo / negativo.

Eu paro o Apache, edito o httpd.conf de acordo com os valores abaixo e vejo como o servidor se comporta:

  • MaxKeepAliveRequests 100
  • KeepAliveTimeout 15
  • MinSpareServers 5
  • MaxSpareServers 10
  • StartServers 5
  • MaxClients 150
  • MaxRequestsPerChild 300

Tenha em mente que o Drupal é um sistema operacional e você pode acabar atualizando o VPS para 512MB.

-Brendan

    
por 24.10.2012 / 19:58