AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 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

通过反向代理向 HTTP/1.1 后端请求小缩略图 (60KB) 时,使用 HTTP/2 的 Apache 速度会变慢

  • 772

我目前正在运行启用了 HTTP/2 的 Apache 服务器作为我的 Web 应用程序的反向代理。我注意到通过此配置请求大量小缩​​略图(每个大约 60KB)时速度明显减慢。奇怪的是,这种速度下降是在从 HTTP/1.1 切换到 HTTP/2 后开始发生的,尽管 HTTP/2 应该可以提高性能(特别是在这种情况下,因为请求许多小文件对于所有花哨的多路复用来说都是一个很好的用例) HTTP/2 可以)。

  • 当顺序请求图像时,我没有注意到速度减慢,但只有当客户端一次提交大量文件(大约 200 个)时才注意到速度减慢。

  • 烘焙程序仅使用 HTTP/1.1,并且可以使用反向代理进行访问。缩略图预先缓存在磁盘上。

这是 Chromium 的 HTTP/2 瀑布图: Waterfall HTTP/2

对于 HTTP/1.1: 瀑布式 HTTP 1.1

正如您在图像中看到的那样,HTTP/2 请求不再停滞,但总体时间增加了。

任何如何进一步调试的指针或提示都会很棒

web-server
  • 2 2 个回答
  • 32 Views

2 个回答

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

    (这应该是一个评论 - 但空间有限)

    1.) 当服务未按预期运行时,首先要查看的地方是日志。但默认的日志格式不会捕获有用的计时信息 - 您应该在 httpd 上至少添加 %D

    2.) 我喜欢 Apache httpd 作为原始服务器,但它作为反向代理不太理想

    3.) 当就软件未按预期运行寻求帮助时,最好提供版本信息及其配置详细信息

    4.)您向我们展示的内容看起来更像是符合 HTTP/1.1 对并发请求的限制,而不是速度减慢的内容(但我没有在 mod_proxy 中看到这种行为)

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

    我认为这与达到最大 Apache 会话流限制以及发生这种情况时 Chrome 在 HTTP/2 及更高版本中处理离屏图像(和其他较低优先级请求)的方式有关。

    默认情况下, mod_http2 允许同时最多允许 100 个流。此后,请求将在发送之前排队。

    我在这里有一个类似的测试(尽管图像较小):https://https.tunetheweb.com/performance-test-360/

    在4g连接下测试时:

    • 在移动设备上(大多数图像都在屏幕外),您会在 100 张图像后看到 HTTP/2 上的阶梯效果,并且 Chrome 会等待所有当前正在进行的请求完成,然后再分批发送下一组 8 个请求:https://www.webpagetest.org/result/231001_BiDcVS_6JG/1/details/#waterfall_view_step1
    • 在桌面上(所有图像都在屏幕上),发送图像 100+ 时仍然存在延迟(因为它不能,因为已达到最大流限制),但 Chrome 不会等待所有当前输入的图像开始前要清除的飞行图像:https://www.webpagetest.org/result/231001_BiDcT3_6SC/1/details/#waterfall_view_step1

    在 HTTP/1.1 下进行相同的测试,您不会看到这种阶梯效果:

    • 手机: https: //www.webpagetest.org/result/231001_AiDcTM_6YH/1/details/#waterfall_view_step1
    • 桌面版:https://www.webpagetest.org/result/231001_AiDcAF_6XZ/1/details/#waterfall_view_step1

    然而,在这两项测试中,HTTP/2 都比 HTTP/1.1 快得多(移动设备上为 9.775 秒 vs 13.864 秒,桌面设备上为 4.129 秒 vs 13.622 秒)。对于较大的图像,这种权衡可能不太有效,并且 HTTP/2 最终可能会变慢。

    因此,我建议在所有图像都显示在屏幕上的情况下重复您的测试。或者将H2MaxSessionStreams最大尺寸提高到更适合您网站的尺寸。

    上限为 400 后重新运行移动测试H2MaxSessionStreams表明它没有限制:https ://www.webpagetest.org/result/231001_BiDcBW_70Q/1/details/#waterfall_view_step1

    然而,当许多请求同时处理时,您最终会遇到各种优先级问题。服务器是否应该以循环方式发送每个响应的一部分?或者按照请求的顺序发送完整的第一个回复。关于这一点已经有很多文章(例如,参见这篇文章),答案取决于很多因素。对于 HTML 和图像(特别是渐进式图像),一次发送位可能会更好,因为它们可以在到达时由浏览器进行处理。对于需要整个资源才能使用的其他资源(例如 CSS 和 JavaScript),发送片段没有用,您最好按顺序发送响应。

    因此,我会谨慎地在这里过多地更改默认值,因为实际上可能没有那么有帮助。另外,将需要浏览器和服务器上更多的资源。如果这是由于屏幕外图像造成的,那么这可能不会像您的测试显示的那么糟糕,因为对用户的影响可能要小得多。

    我还建议尝试减少页面上的资源数量。200 多个文件需要处理很多。HTTP/2 使请求变得更便宜,但不是免费的。

    • 0

相关问题

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 持续监控许多服务器运行状况的简单方法?

  • 构建家庭服务器时要考虑的要点[关闭]

  • 用于 Web 应用服务器的 FreeBSD 磁盘分区(Apache/MySQL/PHP)

  • 我需要在 Rackspace 专用/托管网络和数据库 (Linux) 服务器上安装防病毒软件吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve