AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1144695
Accepted
xhighway999
xhighway999
Asked: 2023-09-29 11:01:53 +0800 CST2023-09-29 11:01:53 +0800 CST 2023-09-29 11:01:53 +0800 CST

Lentidão no Apache com HTTP/2 ao solicitar miniaturas pequenas (60 KB) via proxy reverso para back-end HTTP/1.1

  • 772

Atualmente, estou executando um servidor Apache com HTTP/2 habilitado como proxy reverso para meu aplicativo da web. Percebi uma lentidão significativa ao solicitar um grande número de miniaturas pequenas (cada uma com aproximadamente 60 KB) por meio desta configuração. Estranhamente, essa desaceleração começou a ocorrer após a mudança de HTTP/1.1 para HTTP/2, embora o HTTP/2 deva melhorar o desempenho(especialmente neste caso, já que solicitar muitos arquivos pequenos é um ótimo caso de uso para todas as coisas sofisticadas de multiplexação HTTP/2 faz).

  • Ao solicitar imagens sequencialmente não notei lentidão, mas apenas quando o cliente arquiva muitos arquivos de uma vez (cerca de 200).

  • O Bakend fala apenas HTTP/1.1 e é acessível usando o proxy reverso. As miniaturas são pré-armazenadas em cache no disco.

Aqui está o gráfico em cascata do Chromium para HTTP/2: Waterfall HTTP/2

E para HTTP/1.1: Cascata HTTP 1.1

Como você pode ver nas imagens, as solicitações HTTP/2 não estão mais paralisadas, mas o tempo geral aumentou.

Quaisquer dicas ou dicas sobre como depurar ainda mais isso seria ótimo

web-server
  • 2 2 respostas
  • 32 Views

2 respostas

  • Voted
  1. Best Answer
    symcbean
    2023-09-29T16:41:40+08:002023-09-29T16:41:40+08:00

    (Isso deveria ser um comentário - mas espaço limitado)

    1.) O primeiro lugar para verificar quando um serviço não está se comportando conforme o esperado é nos logs. Mas os formatos de log padrão não capturam informações úteis de tempo - você deve adicionar pelo menos %D em httpd

    2.) Eu adoro o Apache httpd como servidor de origem, mas não é o ideal como proxy reverso

    3.) Ao pedir ajuda sobre o software que não funciona conforme esperado, é uma boa ideia fornecer as informações da versão e os detalhes de como ele está configurado

    4.) O que você nos mostrou parece mais algo em conformidade com o limite do HTTP/1.1 em solicitações simultâneas do que algo lento (mas não vi esse comportamento do mod_proxy)

    • 0
  2. Barry Pollard
    2023-10-01T22:59:29+08:002023-10-01T22:59:29+08:00

    Acho que isso tem a ver com uma combinação de atingir o limite máximo de fluxo de sessão do Apache, com a forma como as imagens fora da tela (e outras solicitações de prioridade mais baixa) são tratadas pelo Chrome em HTTP/2 e superior, quando isso acontece.

    Por padrão, mod_http2 permite no máximo 100 streams ao mesmo tempo. Depois disso, as solicitações ficarão na fila antes de serem enviadas.

    Tenho um teste semelhante aqui (embora com imagens menores): https://https.tunetheweb.com/performance-test-360/

    Ao testar em uma conexão 4G:

    • No celular (onde a maioria das imagens está fora da tela), você vê esse efeito de escada no HTTP/2 após 100 imagens, e o Chrome aguarda que todas as solicitações em andamento sejam concluídas antes de enviar o próximo conjunto em lotes de 8: https://www.webpagetest.org/result/231001_BiDcVS_6JG/1/details/#waterfall_view_step1
    • No Desktop (onde todas as imagens estão na tela) ainda há um atraso no envio de imagens 100+ (pois não é possível porque o limite máximo de transmissão foi atingido), mas o Chrome não espera por TODAS as entradas atuais. imagens de voo a serem drenadas antes de iniciar: https://www.webpagetest.org/result/231001_BiDcT3_6SC/1/details/#waterfall_view_step1

    Fazendo os mesmos testes em HTTP/1.1, você não vê este efeito de escada:

    • Celular: https://www.webpagetest.org/result/231001_AiDcTM_6YH/1/details/#waterfall_view_step1
    • Computador: https://www.webpagetest.org/result/231001_AiDcAF_6XZ/1/details/#waterfall_view_step1

    No entanto, o HTTP/2 é consideravelmente mais rápido que o HTTP/1.1 em ambos os testes (9,775 segundos contra 13,864 segundos no celular e 4,129 segundos contra 13,622 segundos no desktop). É possível que com imagens maiores essa compensação não funcione tão bem e o HTTP/2 acabe sendo mais lento.

    Portanto, sugiro repetir seus testes com todas as imagens na tela. Ou, alternativamente, aumentar o H2MaxSessionStreamstamanho máximo para um mais adequado ao seu site.

    Executar novamente o teste móvel após limitar H2MaxSessionStreamsa 400 mostra que ele não o limita: https://www.webpagetest.org/result/231001_BiDcBW_70Q/1/details/#waterfall_view_step1

    No entanto, quando muitas solicitações estão em andamento ao mesmo tempo, você acaba enfrentando todos os tipos de problemas de priorização. Os servidores devem enviar um pouco de cada resposta em rodízio? Ou envie as primeiras respostas por extenso na ordem em que foram solicitadas. Muito já foi escrito sobre isso (veja este post por exemplo) e a resposta depende de muitas coisas. Para HTML e imagens (e em particular imagens progressivas), enviar bits de cada vez pode ser melhor, pois podem ser processados ​​pelo navegador à medida que chegam. Para outros recursos onde todos os recursos são necessários antes de serem usados ​​(pense em CSS e JavaScript), enviar peças não é útil e seria melhor enviar as respostas em ordem.

    Portanto, eu recomendo alterar muito os padrões aqui, pois pode não ser tão útil. Além disso, exigirá mais recursos no navegador e no servidor. Se isso for devido a imagens fora da tela, isso pode não ser tão ruim quanto seu teste mostra, pois o impacto para o usuário pode ser muito menor.

    Também aconselho tentar reduzir o número de recursos em sua página. Mais de 200 arquivos é MUITO para lidar. HTTP/2 torna as solicitações mais baratas, mas não gratuitas.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve