Eu migrei recentemente um site WordPress que eu herdei para a AWS da Rackspace e estou apresentando grandes reduções de desempenho. Eu sou muito novo em toda a coisa do DevOps, então não tenho certeza de onde começar a procurar.
O problema:
Depois que eu aponto o DNS (Cloudflare) do nosso servidor antigo para o novo, o WordPress (especificamente na seção admin) é encontrado por alguns instantes. Mas depois de uma hora ou mais, a página de administração carrega o tempo limite ou leva até 30 segundos para ser carregado. Ainda não testei todas as páginas, mas isso parece acontecer em páginas com editores, por isso, "nova postagem" ou edição de uma página. Quando a página expira, vejo uma mensagem de tempo limite do Cloudflare.
Devo observar que estou fazendo essa mudança por volta das 23h da noite, ninguém além de mim deve estar logado e o tráfego da Web é de cerca de 150 usuários.
Também notei que nossa instância do RDS começa a atingir 100% de uso da CPU, e as conexões com o banco de dados disparam até cerca de 1.000 conexões.
Como o RDS ultrapassou o limite max_connections, o WordPress não pode mais se conectar ao banco de dados e agora o front-end do site mostra a mensagem "não é possível estabelecer conexão com o banco de dados".
Neste ponto, eu pude reiniciar minhas instâncias do ECV2, mas o banco de dados do RDS ainda está classificando as 1000 conexões.
Também notei que parece que o Elastic Load Balancer (clássico) interrompe a distribuição uniforme de tráfego entre as duas instâncias.
Eu vou ter outra chance neste fim de semana, mas o que eu deveria estar procurando nos logs? Antes de as instâncias do EC2 fecharem, eu atendi os logs e tudo que vi foi:
pid 17186:tid 139743773734656] (70007)The timeout specified has expired: [client 127.0.0.1:58604] AH01075: Error dispatching request to : (polling), referer: http://m.facebook.com
Visão geral das especificações:
Servidor -
Na AWS, estamos usando de 2 a 6 servidores m3.large EC2 com balanceamento / escalonamento automático, gerenciados pelo Elastic Beanstalk (para a integração com o Github) e um balanceador de carga clássico, o Cloudflare é usado para a terminação de DNS e SSL.
Estamos usando o Apache 2.4 com PHP 5.6 e o PHP-FPM em uma AMI de 64 bits do Amazon Linux / 2.7.1
RDS -
R3.Large executando Aurora e parte de um cluster com uma réplica de leitura em execução. Eu tentei usar um R3 Large alguns dias atrás, e as cargas da página de administração foram de 15 a 30 segundos ... Ainda muito lento.
Eu também devo mencionar que o RDS foi instalado, fora do Elastic Beanstalk. Eu não acho que isso deva importar. No entanto, existem dois outros bancos de dados nesse servidor, para alguns sites menores que basicamente não recebem tráfego e serão descomissionados em breve.
Eu habilitei o cache de objetos via W3TC, e adicionei algumas regras do Cloudflare para desabilitar desempenho e aplicativos para / wp-admin * como recomendado aqui
Algumas coisas que li na internet
- Talvez o limite de tempo limite do ELB seja menor que o limite do Apache e isso está causando problemas
-
Este artigo sugere alterar meu MPM de evento para prefork ou worker