Estou tentando solucionar problemas de baixo desempenho ao enviar arquivos grandes para um servidor Windows executando Apache.
Server:
Windows Server 2019 Datacenter
AMD EPYC 7763 64-Core Processor 2.44 GHz
32 GB RAM
Download speed (Mbps): 1737.12
Upload speed (Mbps): 2284.35
Local:
Download speed (Mbps): 269.31
Upload speed (Mbps): 48.37
Apache/PHP:
Apache/2.4.58 (Win64) PHP/8.2.16 OpenSSL/3.1.5 configured
File:
MP4 format
886 MB
Testei o benchmark enviando via WeTransfer e levou 2 minutos e 45 segundos.
O problema que estou enfrentando é que, ao tentar transferir o arquivo, seja usando o plupload com chunking (50 MB) ou um HTML multiform simples, por meio de um navegador da web, demora cerca de 4 minutos e 30 segundos.
Em seguida, testei um script cURL de shell de comando para POSTAR o mesmo arquivo no mesmo servidor (por http e https) e a transferência levou 2 minutos e 32 segundos.
Alguém pode me explicar por que o desempenho via cURL é tão melhor que o do navegador; e se possível, como posso configurar o Apache para ter um desempenho mais próximo da transferência cURL?
Desde já, obrigado,
Base
Editar 1
OK, acho que o problema surge quando se usa um formulário web PHP em vez de SSL.
Monitorei o desempenho do servidor Ethernet (Adaptador de Rede Microsoft Hyper-V) durante as transferências.
PHP web form HTTP = 2:30m @48-50 Mbps
PHP web form HTTPS = 4:30m @30 Mbps
Ainda não tenho certeza do porquê o curl se comporta da mesma forma em HTTP ou HTTPS ou como lidar com o problema PHP/SSL.
Editar 2
Após alguma solução de problemas adicional, parece que o problema ocorre quando o protocolo http2 (h2) é usado.
Testar a transferência de arquivos https usando http/1.1 tem o mesmo desempenho que http.
Entretanto, ao definir http2 (h2), o desempenho é prejudicado.
Suspeito que isso se deva ao controle de fluxo de recepção ou algo parecido.
Alguém pode sugerir alguma correção possível para o Windows Server 2019?