Temos um VPS (2GB RAM/2 vCPU's). Isso está servindo um fórum phpBB em PHP 5.6, Centos 6, Apache 2.2. No entanto, às vezes o fórum é super lento para responder. Usando o navegador de rede Chrome, descobri que o TTFB às vezes chega a 30 segundos. Estranhamente, os itens em cache também têm esse problema. (veja a captura de tela)
Eu já tentei:
- a carga do servidor durante o problema não é superior a 0,20 e há memória livre.
Eu pinguei o servidor: cerca de 10ms
instale o zend opcache (99,9% de acessos)
- instalar memcached ( stats )
Eu instalei o mytop para ver se o MySQL é o problema, mas pelo que entendi, o MySQL não está fazendo muito
Consultas: 6,0M qps: 26 Slow: 4,0 Se/In/Up/De(%): 75/02/08/01 qps agora: 2 Slow qps: 0,0 Threads: 1 ( 1/ 0) 00/00/00/ 00 Eficiência de chave: 99,4% Bps entrada/saída: 4,4k/51,1k Agora entrada/saída: 48,4/7,5k
Como nem sempre é o caso, a única maneira de replicar esse problema é enviar spam para F5, embora eu não tenha certeza de que está realmente replicando o problema. Eu poderia em menor extensão (2s ttfb) replicar isso com a mesma página copiada em html (removi a parte dinâmica).
http://s21.postimg.org/ql6eywn3b/ttfb.png
Tenho keepalive ativado (100 no máximo, 15 segundos), com maxclients 30. Para onde vou a partir daqui?
Criação de perfil. Existem várias ferramentas de criação de perfil PHP. Eu gosto do blackfire.io - ele identificará com facilidade e clareza quaisquer gargalos, seja código PHP, consultas MySQL ou uma combinação dos dois. Sem o perfil, você está tentando coisas aleatoriamente no escuro.
Em vez de F5ing, você também pode fazer alguns testes de carga com ferramentas como ab, yandex tank, Siege etc.
Outra coisa a fazer para verificar se esse problema é real é testar em webpagetest.org e repetir o teste várias vezes (configurações avançadas, número de execuções). Ou por meio de sua API.
A questão era um problema combinado:
O VPS foi movido para um IO melhor, e o firewall não foi definido tão estritamente e o problema foi resolvido. Também desativei o memcached, pois o MySQL claramente não era o ponto de estrangulamento)