it-swarm-pt.tech

Qual é a maneira ideal de analisar o uso de memória do WordPress?

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

É muito rápido com um problema: os processos do Apache pesam regularmente entre 80 e 120 MB. O servidor da web tem 2 GB de memória, o que significa que eu recebo 15 ou mais processos até que as coisas vão no fritz. Os processos obviamente não devem ser tão grandes, mas estou perplexo sobre o porquê deles serem.

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

Desde já, obrigado!

Update 10/2/10:Para os que estão se perguntando, a resolução do problema do problema de memória foi a desativação do PHP xdebug (foi inadvertidamente habilitado na configuração e causou picos de uso de memória aleatória) .

8
Daniel Bachhuber

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, dê alguns ajustes.

Wordpress

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

Estratégias

Para descobrir o que está acontecendo, você precisa controlar a quantidade de memória que uma solicitação de wordpress está ocupando. Há uma função de obtenção de pico de uso ( memory_get_peak_usage() ) que você pode usar para monitorar o uso de memória do worpdress. Se chegar perto dos 80 - 120 MB que você escreveu, você sabe que o wordpress está criando suas dores de cabeça. Você pode querer registrar o registro de data e hora, a memória de pico, o tempo de execução e o URI solicitado.

Usar o Nginx para servir páginas em wordpress em cache certamente o ajudará, pois evitará que o wordpress seja carregado - mesmo para os caches "de entrada", como o que você usa. Eles são conceitualmente quebrados porque são um plugin wordpress, então pelo menos uma parte do wordpress precisa ser carregada até mesmo para resultados em cache.

4
hakre

Daniel,

Eu respeitosamente discordo do kenkeiter, eu entendo usar o nginx como um proxy reverso na frente do Apache. A Harvard Law teve grande sucesso com este método e eles têm um ótimo artigo sobre como eles fazem isso, com um link para o seu plugin 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 todos os pedidos no front-end, ele não melhora o desempenho para usar quaisquer outros plugins do tipo cache no backend, e não vale a complexidade adicional. Se você é sério sobre como usar o nginx desta forma, eu recomendo que você dê uma olhada no artigo sobre sua experiência e tente reduzir os processos dinâmicos, incluindo o cache do WP.

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

1
mitcho

Bem, primeiro de tudo, você está usando o Apache e o Nginx - meio redundante. Você deve estar usando Nginx/FastCGI w/PHP. O tutorial neste site deve ajudar. Caso contrário, meu melhor palpite é que alguma mudança recente no seu código está causando algum bug no PHP para não liberar a memória corretamente. Não há razão para que um processo do Apache consuma muita memória.

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

Boa sorte!

@kenkeiter

0
kenkeiter