我正在尝试解决将大文件上传到运行 Apache 的 Windows 服务器时出现的性能不佳的问题。
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
我已经通过 WeTransfer 上传测试了基准,耗时 2 分 45 秒。
我面临的问题是,当尝试传输文件时,无论是使用分块的 plupload(50MB)还是简单的 HTML 多形式;通过网络浏览器大约需要 4 分 30 秒。
然后,我测试了一个命令 shell cURL 脚本,将同一个文件 POST 到同一个服务器(通过 http 和 https),传输耗时 2 分 32 秒。
有人能向我解释为什么通过 cURL 的性能比浏览器好得多吗?如果可能的话,我该如何配置 Apache 以使其性能更接近 cURL 传输?
提前致谢,
巴兹
编辑1
好的,我认为问题出现在通过 SSL 使用 PHP Web 表单时。
我在传输过程中监控了服务器以太网(Microsoft Hyper-V 网络适配器)的性能。
PHP web form HTTP = 2:30m @48-50 Mbps
PHP web form HTTPS = 4:30m @30 Mbps
我仍然不确定为什么 curl 在 HTTP 或 HTTPS 上的行为相同,或者如何解决 PHP/SSL 问题。
编辑2
经过一些额外的故障排除后,问题似乎出在使用 http2 (h2) 协议时。
使用 http/1.1 测试 https 文件传输的性能与 http 相同。
但是当定义http2(h2)的时候,性能会下降。
我怀疑这是为了接收流量控制或类似控制。
有人能建议针对 Windows Server 2019 的任何可能的修复方法吗?
问题出在启用 HTTP2 协议。
切换回 HTTP/1.1 解决了上传速度问题(只有较大的文件才会出现)。
答案在这里:https://serverfault.com/a/932702/345337