Começando cerca de uma semana atrás, comecei a notar um desempenho terrível na minha webapp.
Minha inscrição é veiculada em uma instância do Amazon EC2 m1.large.
Arquivos estáticos de apenas 4-5kb costumavam levar mais de 10 segundos para receber. Isso aconteceria intermitentemente, mas para cada carregamento de página, eu poderia esperar pelo menos um ou dois grandes tempos de espera para um recurso em particular.
Verificando o Firebug Estava claro que o atraso estava na parte 'aguardando' do pedido. (DNS / conexão / envio e recebimento sempre foram bons)
Infelizmente, ainda não tenho a reputação necessária para postar uma imagem, ou gostaria de fazer isso.
Para piorar a situação, quando uma página solicita muitos recursos estáticos, como Imagens, quase todas as solicitações parecem exibir esse problema.
Tendo brincado com minha configuração NGINX e PHP-FPM, a última semana não cheguei até hoje, quando percebi que o problema parece existir apenas quando o servidor é acessado via HTTPS.
Isso pode ser visto ao usar o comando ab
para testar o desempenho.
HTTPS:
ab -c 100 -n 3000 https://www.mydomain.com/
Server Port: 443
SSL/TLS Protocol: TLSv1,RC4-SHA,2048,128
Document Path: /
Document Length: 13367 bytes
Concurrency Level: 100
Time taken for tests: 12.122 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Total transferred: 41205000 bytes
HTML transferred: 40101000 bytes
Requests per second: 247.48 [#/sec] (mean)
Time per request: 404.067 [ms] (mean)
Time per request: 4.041 [ms] (mean, across all concurrent requests)
Transfer rate: 3319.52 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 13 219 91.2 216 577
Processing: 18 178 83.5 166 562
Waiting: 10 168 80.5 156 549
Total: 60 397 124.9 386 809
HTTP:
ab -c 100 -n 3000 http://www.mydomain.com/
Server Port: 80
Document Path: /
Document Length: 184 bytes
Concurrency Level: 100
Time taken for tests: 0.468 seconds
Complete requests: 3000
Failed requests: 0
Write errors: 0
Non-2xx responses: 3000
Total transferred: 1431000 bytes
HTML transferred: 552000 bytes
Requests per second: 6404.06 [#/sec] (mean)
Time per request: 15.615 [ms] (mean)
Time per request: 0.156 [ms] (mean, across all concurrent requests)
Transfer rate: 2983.14 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 3 7 2.2 8 11
Processing: 2 8 2.4 7 18
Waiting: 1 6 2.0 6 16
Total: 11 15 1.4 15 28
Eu sou muito inexperiente quando se trata de diagnosticar esses tipos de problemas e é bem possível que eu esteja interpretando mal a saída da ferramenta acima. Independentemente disso, apesar de uma enorme quantidade de pesquisa no Google eu ainda não sei por onde começar.
A parte relevante do meu nginx.conf
:
#SSL certs
ssl on;
ssl_certificate /etc/ssl/certs/mycert.crt;
ssl_certificate_key /etc/ssl/certs/mycert.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
Em primeiro lugar, gostaria de saber se pareço estar no caminho certo com a minha afirmação de que é o SSL / HTTPS que está causando o problema. Em segundo lugar, como há alguma sugestão de como eu iria corrigi-lo?
A mesma configuração funcionou perfeitamente até recentemente, por isso não tenho a certeza do que aconteceu.
Muito obrigado antecipadamente.