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 / 问题 / 1031656
Accepted
P.T.
P.T.
Asked: 2020-08-27 14:06:46 +0800 CST2020-08-27 14:06:46 +0800 CST 2020-08-27 14:06:46 +0800 CST

Varnish 在更大的文件上崩溃

  • 772

总的来说,我提供非常小的文件。想想图片和小视频。用 Varnish 缓存这些就像轻而易举,不会给我带来任何问题。

我遇到的问题是当我下载一个 6 GB 的文件时。这样做时,我看到 Varnish 使用的内存一直在上升,直到它崩溃。然后它重新开始,直到它再次崩溃。

  1. 我想避免 Varnish 崩溃
  2. 下载因此每次都暂停并且非常慢。它应该只下载 6 GB 的文件。时期。

我已经尝试过文件和 RAM 缓存存储,但没有什么不同。通过设置瞬态内存,我能够避免崩溃; DAEMON_OPTS="-s Transient=malloc,512m"

但是,这只会导致 Varnish 使用 512MB 的那一刻,之后它会再次崩溃。

vcl_backend_response作为测试用例,我已经尝试过

  if (std.integer(beresp.http.Content-Length, 0) > 5242880) {
        set beresp.do_stream = true;
        return (deliver);
  }

和

  if (std.integer(beresp.http.Content-Length, 0) > 5242880) {
        set beresp.uncacheable = true;
        return (deliver);
  }

但是,这些都不能确保使用我的浏览器很好地下载了文件。

VarnishLog 抛出此错误,但我想这只是意味着内存已满并因此崩溃。 FetchError Could not get storage

我在这里错过了什么,以避免下载被停止?清漆是否以某种方式缓存文件?

注意:HAProxy 运行在 Varnish 前面。Apache 是实际的 Web 服务器。

cache varnish large-data
  • 1 1 个回答
  • 911 Views

1 个回答

  • Voted
  1. Best Answer
    Thijs Feryn
    2020-08-28T00:34:59+08:002020-08-28T00:34:59+08:00

    计数器

    请使用.查看您的存储计数器varnishstat。

    这些计数器将帮助您了解正在发生的事情:

    SMA.s0.g_space
    SMA.s0.g_bytes
    SMA.Transient.g_bytes
    

    g_space让您知道可用空间,并且g_bytes是正在使用的空间字节数。SMA是您的malloc storage,Transient是指不属于您的缓存大小的临时存储。

    缓存大小

    如果您正在处理大小为6GB的对象,您的-s malloc设置应至少为6 GB 大小,否则无法分配空间,它会在您身上崩溃。

    如果在这种情况下您的缓存大小仅略大于6 GB,Varnish 将不断地从缓存中删除对象以节省空间。请确保里面有足够的东西。

    TTL 为 2 分钟或更短的短期对象永远不会结束,并且会占用瞬态存储

    文件装卸工

    有一个文件 stevedore将使用磁盘来存储对象。如果缓存的总大小超过了您愿意分配给 Varnish 的内存量,则可以使用此选项。

    但是,随着时间的推移,文件 stevedore会减慢您的速度,因为它并没有真正为此进行优化。它会受到磁盘碎片的影响,并且没有很好的性能。

    海量存储引擎

    为了解决这些存储问题,Varnish Software 创建了海量存储引擎 (MSE)。它能够存储 PB 级的数据,并且其编写方式不会受到碎片或延迟的影响。

    不幸的是,这不是一个开源的搬运工。它是 Varnish Enterprise 产品的一部分,需要许可证。但是,我们的官方云映像(在 AWS、Azure、GCP 和 OCI 上)让您有机会使用 Varnish Enterprise,而无需提前购买许可证。

    • AWS:https ://aws.amazon.com/marketplace/pp/B07L7HVVMF?ref_=srh_res_product_title
    • Azure:https ://azuremarketplace.microsoft.com/en-us/marketplace/apps/varnish.varnish-enterprise?tab=Overview
    • GCP:https ://console.cloud.google.com/marketplace/details/varnish-public/varnish-cache-6-payg-ubuntu?q=varnish&id=6a56f7aa-357c-4032-95c9-ce008bbe534f
    • OCI:https ://cloudmarketplace.oracle.com/marketplace/en_US/listing/73388855

    不要缓存大文件

    另一种选择是防止大文件被缓存在一起。

    显然,根据内容长度排除大文件是行不通的。目前,确保大文件不消耗对象存储内存的唯一方法是调用return(pipe).vcl_recv

    这不是一个理想的解决方案,因为您应该根据传入的请求提前知道响应将是巨大的。

    return(pipe)是 Varnish 中绕过缓存的一种机制,也可以退出HTTP 模式并进入TCP 模式。这通常用于传入请求看起来不像 HTTP 的情况。

    • 1

相关问题

  • 缩放大文件下载?

  • Gzip 与反向代理缓存

  • 如何禁用tomcat缓存?我遇到了奇怪的静态文件问题

  • mod_mem_cache 提供错误的内容!

  • NFS 缓存导致间歇性滞后

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