Eu tenho um servidor web em um Linode 1024 VPS baseado em
- Ubuntu 11.10
- Nginx 1.0.5
- PHP 5.3.6 (com PHP-FPM, APC)
- Verniz 3.0.2
E alguns blogs baseados no WordPress 3.3.1. Um deles é um blog simples, com a configuração padrão, o tema e apenas a publicação "Hello World", para testar o servidor. O outro é um blog clonado de outro servidor, com quase 10 mil posts e mais de 10 mil comentários. Este blog tem cerca de 5k exclusivos por dia.
O servidor fornece bons números em um teste ab para o blog de teste , mas é impossível fazer o mesmo teste com o blog clonado: o teste ab carrega muito o servidor e eu tenho que parar o processo, o que faz com que ab seja exibido esse resultado realmente ruim .
O htop também mostra uma carga "normal" quando em operação normal , mas uma carga anormal durante o teste de ab.
Há outra coisa estranha acontecendo (a mais importante para mim): o Time To First Byte é extremamente alto , mas depois disso, o site carrega muito rápido. Isso pode ser facilmente testado com serviços como tools.pingdom.com, que fornece esse resultado . Por favor, preste atenção na região amarela que significa "tempo de espera".
Por que isso está acontecendo? Idéias possíveis:
- Configuração incorreta do PHP-FPM
- O tempo de resposta do DNS Linode é péssimo. Bobagem - o blog de teste resolve o problema do DNS, o TTFB é fantástico
- Configuração incorreta do Nginx
Caso alguém precise de mais informações,
- Aqui você tem o arquivo de configuração atual do blog clonado nginx ( /etc/nginx/sites-available/muycomputerpro.com )
- Aqui você tem a configuração atual do my.cnf ( /etc/mysql/my.cnf ) (eu sei, no momento não estou armazenando em cache, isso não fez diferença no TTFB no passado)
- Aqui você tem a configuração atual do PHP-FPM ( /etc/php5/fpm/pool.d/www.conf )
if -f
diretiva que você está usando nolocation
contêiner na configuração do nginx. Com base no que estou lendo aqui , wiki.nginx.org/Pitfalls , sinto que-f
está fazendo uma pesquisa ineficiente pelo arquivo, o que poderia causar um problema de tempo até o primeiro byte, especialmente se você tiver diretórios com um grande número de arquivos.ab -n 1000 -c 100 -H 'Host: mysite.com' http://127.0.0.1/
Dito isto - a diferença entre resultados em cache (verniz) e não armazenados em cache é suficiente para validar a posição de que o problema não está relacionado à rede, ao DNS, etc. e está no processamento, conforme o esperado.Respostas:
Em primeiro lugar, isso não é uma resposta, mas uma abordagem de diagnóstico.
Isso não é de forma alguma abrangente - ou mesmo algo próximo, é apenas um ponto de partida.
Hora do primeiro byte
O tempo até o primeiro byte (TTFB) possui vários componentes:
Quando você olha para uma saída do ApacheBench, também vê:
Comparações para eliminar componentes
Com poucas exceções, seu problema está no processamento de back-end, que geralmente se resume a código excessivamente complexo / ineficiente ou MySQL mal configurado.
Uma boa maneira de abordar esse problema é através de uma série de comparações que eliminam vários aspectos da sua instalação. Uma boa comparação deve manter-se o mais constante possível para ajudar a diminuir o problema. Atualmente, você forneceu as seguintes comparações:
O teste ideal faria você duplicar seu site completo, mas excluir todo o conteúdo, exceto um artigo e os comentários associados. O objetivo deste teste seria determinar conclusivamente se a grande quantidade de conteúdo é o problema ou se outros aspectos de sua configuração (plugins wordpress, tema, etc.) são a causa. Você compararia essencialmente o desempenho de sites idênticos, no mesmo servidor (novo) - carregando a mesma página (mesmo comprimento etc.) - com a única diferença no conteúdo total do site (por exemplo, há uma boa chance de que algum plug-in não dimensionar bem com o aumento do conteúdo).
Sem alterar nada, existem outras comparações que você pode fazer:
Ajustando seu back-end
A essa altura, você já deve ter encontrado o problema ou concluído que está no seu back-end. Isso deixa você Nginx, PHP ou MySQL.
(Devo mencionar aqui, que é sempre útil saber se o seu gargalo é CPU, RAM, ou I / O - entre
sar
,top
,iostat
,vmstat
,free
., Etc você deve ser capaz de chegar a alguma conclusão sobre isso)Nginx
O Nginx está apenas recebendo solicitações e servindo conteúdo estático ou transferindo as solicitações para PHP-FPM - geralmente não há muito o que otimizar com o Nginx.
Idealmente, o seu blog de teste e o blog clonado têm configurações idênticas; nesse caso, você efetivamente eliminou o Nginx como o problema.
Inscrição
No caso em que você está tentando identificar um problema no seu código (por exemplo, um plug-in lento, etc.), os logs lentos são o ponto de partida.
MySQL
PHP
PHP-FPM
Vale ressaltar que os resultados de seu htop mostram php-fpm consumindo a maior parte da CPU - e seu problema parece estar diretamente relacionado a isso.
Armazenamento em cache
Depois de otimizar cada provável gargalo, inicie o cache.
Às vezes, dadas as limitações de seu aplicativo e hardware, talvez você não consiga melhorar o desempenho do back-end - no entanto, esse é o ponto do cache - para minimizar o uso do back-end.
Leitura adicional
fonte
memory_limit
, foi apontado em outro post que não ajuda no desempenho.