Qual é a maneira ideal de criar um perfil do uso da memória do WordPress?

8

Estamos executando uma instância multissite do WordPress em dois servidores Rackspace Cloud, um web e um banco de dados, com mais de 30 sites atualmente. Coloquei o Nginx na frente de ativos estáticos e o Apache lida com todas as solicitações dinâmicas. Também configurei o Memcached para o banco de dados e o cache do código operacional da APC para PHP. O cache total do W3 é ativado por padrão em todos os sites que temos.

É muito rápido com um problema: os processos Apache pesam regularmente entre 80 e 120 MB. O servidor da Web tem 2 GB de memória, o que significa que eu recebo mais ou menos 15 processos até que as coisas corram bem. Obviamente, os processos não devem ser tão grandes, mas estou perplexo com o motivo.

Qual é uma boa estratégia para identificar o que está acontecendo?

Desde já, obrigado!

Atualização 10/2/10: Para aqueles que se perguntam, a resolução do problema de memória estava desativando o PHP xdebug (foi inadvertidamente ativado na configuração e causou picos aleatórios no uso da memória).

Daniel Bachhuber
fonte

Respostas:

4

A quantidade de memória do processo apache sobre a qual você fala (80 a 120 MB por processo) pode ser dividida em dois motivos.

  1. Apache
  2. Wordpress

Apache

Você pode otimizar o apache carregando apenas o número de módulos necessários e outros ajustes de otimização que reduzirão a memória. Se você ainda não otimizou isso, faça alguns ajustes.

Wordpress

O Wordpress consome muita memória e não é muito otimizado. Eu começaria substituindo a classe de banco de dados por algo mais implementado corretamente. Isso deve ganhar mais velocidade e reduzir muito o uso de memória. Além disso, não tenho muito o que sugerir. Não usar o Worpdress não é considerado útil, eu acho.

Estratégias

Para descobrir o que está acontecendo, você precisa acompanhar quanta memória um pedido de wordpress está ocupando. Existe uma função get peak memory_get_peak_usage()use ( ) que você pode usar para monitorar o uso da memória do worpdress. Se chegar perto dos 80 - 120 MB sobre os quais você escreveu, você sabe que o wordpress está criando suas dores de cabeça. Convém registrar o registro de data e hora, memória de pico, tempo de execução e URI solicitado.

Usar o Nginx para servir páginas em cache do wordpress certamente o ajudará, pois impedirá o carregamento do wordpress - mesmo para aqueles caches "de entrada" como o que você usa. Eles são quebrados conceitualmente porque são um plugin do wordpress; portanto, pelo menos uma parte do wordpress precisa ser carregada, mesmo para resultados armazenados em cache.

hakre
fonte
1

Daniel,

Discordo respeitosamente do kenkeiter, entendo usar o nginx como um proxy reverso na frente do Apache. A Harvard Law obteve grande sucesso com esse método e eles têm um ótimo artigo sobre como fazer isso, com um link para o plug-in do WordPress que ajuda a interface com o nginx:

http://blogs.law.harvard.edu/djcp/2010/01/nginx-as-a-front-end-proxy-cache-for-wordpress/

O que eles descobriram na Harvard Law foi que, com o nginx basicamente armazenando em cache todas as solicitações no front-end, na verdade não melhora o desempenho para usar outros plug-ins do tipo cache no back-end e não vale a complexidade adicional. Se você é sério sobre o uso do nginx dessa maneira, recomendo que você dê uma olhada nesse artigo sobre a experiência deles e tente analisar os processos dinâmicos, incluindo o cache do lado do WP.

Algumas investigações básicas, como examinar atentamente os registros de acesso e erro do Apache para ver quais tipos de consultas realmente precisam ser feitas dinamicamente e tentar reduzir esses casos, também podem ser um bom começo.

mitcho
fonte
0

Bem, primeiro de tudo, você está usando Apache e Nginx - meio redundante. Você deve estar usando o Nginx / FastCGI com PHP. O tutorial deste site deve ajudar. Caso contrário, meu melhor palpite é que algumas alterações recentes no seu código estão causando algum bug no PHP para não liberar memória corretamente. Não há razão para que um processo Apache consuma tanta memória.

http://interfacelab.com/nginx-php-fpm-apc-awesome/

Boa sorte!

@kenkeiter


fonte
Nginx / FastCGI seria fantástico, mas está fora do alcance de resolver este problema
Daniel Bachhuber