Varnish 需要很多内存吗?

Varnish 需要很多内存吗?

除了虚拟内存之外,Varnish 的 RAM 使用情况如何?

需要多少内存?

答案1

您可以在几种不同的模式下运行 Varnish。一种模式使用磁盘作为缓存存储库,在这种模式下,您可以安全地重新启动 Varnish 而不会丢失缓存。这也意味着您可以支持非常大的缓存,并让操作系统的 IO 缓存将请求最多的内容保存在服务器的内存中。此模式使用标志配置-s file,/var/lib/varnish/varnish_storage.bin,1G

另一种模式是仅内存模式 - Varnish 将所有缓存数据仅保存在内存中,从不写入磁盘。这可以提供极快的响应时间,但缓存大小受限于服务器的内存量。此外,如果您重新启动 Varnish,您将丢失缓存,并且请求将突然开始淹没您的后端。但请注意,Varnish 非常稳定,我们只会在发布更新时(大约每 6 个月)重新启动 Varnish。此模式的配置如下-s malloc,3200M

所以回答你的问题,Varnish 在 RAM 更大的情况下性能会更好。我们有一个 Amazon EC2 实例,RAM 为 3.5GB,没有交换,我们给 Varnish 3GB RAM 用于缓存。目前,我们几乎将整个后端网站都缓存在缓存中,包括图像和 PDF 文件等。我绝对可以推荐这种设置。

答案2

答案3

Varnish 实际上支持多种存储后端。你可以将某些内容缓存到 RAM,也可以将某些内容缓存到磁盘:

-s default=malloc,256m \
-s static=file,/var/lib/varnish/varnish_storage.bin,1G"

这对于有条件地将静态文件缓存(.css、.js 文件)存储到磁盘以及将整页缓存存储到 RAM 中非常有用。您需要适当调整 .vcl 文件以有条件地缓存到每个存储后端:https://www.getpagespeed.com/server-setup/varnish-static-files-cache

这将允许您将内存占用保持在最低水平,同时仍使用部分 RAM 用于缓存。

答案4

在大多数情况下(详细说明中的例外情况),为了获得良好的性能,您将需要系统中的可用内存(可供内核用于缓存磁盘),其大小等于或大于您网站经常访问部分的大小,内核应该能够使用RAM来缓存您的Varnish磁盘缓存,这可能是磁盘缓存在Varnish中是默认设置的原因。比这更多的可用RAM可能会产生收益递减,并且不会提供您在RAM上花费的价值。

我在下面附加了一个修改后的先前答案,它没有直接回答你的问题,但可能有助于你理解上述答案的相关性,我希望它有所帮助。

Varnish 中的默认缓存是磁盘而不是 RAM,这可能是因为,在专用于 varnish 的机器上,磁盘上的 varnish 缓存无论如何都会缓存在 RAM 中(linux 内核的默认行为),只要读取或写入文件系统的部分,就会发生这种情况。

这也意味着,如果拥有比网站经常访问部分的大小更多的可用 RAM,那么 Varnish 的性能将大大提高,就像使用 RAM 缓存运行一样,同时当发生另一个事件(如操作系统更新或触发 cron 作业)时,不会强制服务器进行 SWAP(降至最低)。

那么我什么时候应该使用专用的 Varnish RAM 缓存?

如果可能出现以下情况,那么将内存专用于清漆可能是一个好主意。

1- 您的 varnish 安装在使用某些半虚拟化技术的虚拟机上(PARA 是关键字,因为这在共享内核时发生)。

这是因为内核磁盘缓存由虚拟化主机处理,因此在负载较高的机器上,该 RAM 缓存可能会每隔几秒钟被不同的虚拟机耗尽!

2- 拥有一个数据库(或任何其他经常读取或写入大量磁盘的应用程序),其中包含许多频繁访问的大型对象(例如大 BLOBS)

与 varnish 在同一台机器上的此类应用程序也会破坏 varnish 和数据库引擎/其他应用程序的内核磁盘缓存。

我希望这可以帮助您做出选择,并且我为之前的帖子的写作方式向版主道歉。

相关内容