O servidor está praticamente sobrecarregado - algumas centenas de solicitações por segundo. A grande maioria deles é através de SSL.
O problema é que a primeira solicitação via HTTPS ao servidor encontra uma resposta muito lenta (como 10s), mesmo que o banco de dados não esteja envolvido. As próximas solicitações são realizadas em um piscar de olhos. Ao mesmo tempo, sem SSL, ele funciona rápido e constantemente. Há poucos dias a situação se inverteu - a maior parte do tráfego estava sem SSL e então era rápido sem SSL e com SSL lento.
Quero que as conexões passem por SSL, mas a primeira resposta após algum tempo de falta de atividade no nível de cerca de 10 segundos é inaceitável. O que eu poderia mudar provavelmente na configuração do Apache2 para evitar a primeira resposta lenta?
Responder1
Parece que você está vinculado à CPU na troca de chaves. Problema comum. Quando um cliente se conecta via SSL/TLS pela primeira vez, é feita uma troca de chaves (muito cara do ponto de vista computacional). Após a conclusão desta troca de chaves os clientes poderão reaproveitar as chaves obtidas na troca na comunicação a seguir. É por isso que a primeira solicitação via HTTPS leva tanto tempo para ser concluída.
Há muito pouco que você possa fazer sobre esta situação, além de adicionar recursos. Mais CPU irá acelerar os cálculos da troca de chaves. Mais memória é sempre bom. Você também pode configurar o Apache para manter as chaves geradas na memória por mais tempo, para evitar que os clientes refaçam a troca de chaves.
Você também pode obter algumas melhorias marginais no desempenho alterando os conjuntos de criptografia ou ajustando os comprimentos das chaves, mas geralmente não vale a pena o incômodo.
Se você for executar esse tipo de carga por mais tempo, pode ser uma boa ideia descarregar os cálculos SSL/TLS. Você pode obter uma caixa separada (usando seu proxy favorito), um cartão de aceleração SSL ou até mesmo uma caixa de descarregamento SSL/TLS especializada.
Responder2
Parece problema de DNS. Verifique se o DNS está configurado no localhost e funcionando corretamente, verifique tambémPesquisas de nome de hostA diretiva está desativada na configuração do Apache.
Responder3
Posso pensar em dois cenários:
- Verifique os logs do Apache e faça algo inteligente com isso (erros, registros de data e hora dos logs de acesso, etc.) - acho que isso é um tiro no escuro
- Ou: sugiro que você informe ao Wireshark como funciona o protocolo de handshake SSL. Você deve ver onde transcorrem os 10s - no lado do servidor ou no lado do cliente. Acho que abrir o keystore ou algo parecido leva muito tempo, mas primeiro você deve detectar o tráfego da rede em busca de carimbos de data e hora. Deixe-nos saber como foi!
Responder4
Eu encontrei um problema. Tive que desligar o KeepAlive.
Havia muitas novas conexões a cada segundo (200-300/s, às vezes mais). A maioria deles não precisava que a conexão fosse mantida ativa por 5 segundos. Como resultado, o pool de conexões foi rapidamente utilizado e todas as novas conexões tiveram que esperar que a antiga terminasse após os 5s.
Parece que a opção KeepAlive é útil apenas quando o servidor é capaz de manter conexões abertas suficientes, enquanto a maioria dos usuários faz algo especificado pelo parâmetro KeepAliveTimeout (como 5s no meu caso).
Caso contrário, é realmente útil desligá-lo.