总的来说,我提供非常小的文件。想想图片和小视频。用 Varnish 缓存这些就像轻而易举,不会给我带来任何问题。
我遇到的问题是当我下载一个 6 GB 的文件时。这样做时,我看到 Varnish 使用的内存一直在上升,直到它崩溃。然后它重新开始,直到它再次崩溃。
- 我想避免 Varnish 崩溃
- 下载因此每次都暂停并且非常慢。它应该只下载 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 服务器。