对 Varnish 服务器上各种 Linux 命令的影响

对 Varnish 服务器上各种 Linux 命令的影响

我知道 Varnish 的使用内存映射在内存中缓存数据的技术,如果我在机器上执行以下命令,Varnish 的整体性能会受到什么影响吗?

例如

总内存大小 = 4GB,随机生成的 test.txt 虚拟文件 = 2GB

1. cat test.txt
2. mv test.txt /another-partition
3. cp test.txt /another-partition
4. mv test.txt /another-dir
5. cp test.txt /another-dir

答案1

有趣的问题!

作为参考,VM 子系统作者的这个页面将让您很好地了解可能发生的情况;

http://linux-mm.org/PageReplacementDesign

请注意,以目前的形式回答这个问题实际上非常困难(如果您正在谈论文件支持的缓存),因为它取决于缓存的热度、缓存项目的时间以及缓存中每个对象的“热度”。

假设如下:-

  • 缓存由 10G 文件支持,并且已被完全填满。
  • 缓存中 3% 的对象占所有命中的 90%。
  • 在任何给定时间您都有大约 80 个可处理的并发连接。
  • 您没有更改默认的 VM 策略。
  • 在执行命令之前,页面缓存几乎完全被来自 varnish 缓存的页面填满。
  • 500M 的数据专门分配给系统上运行的其他程序的匿名页面。

由于你的 varnish 缓存大小为 10G,它永远不会完全装入内存,因此以下公式具有相对代表性

  • 有3500M的页面缓存。
  • 最热的 1750Mb 清漆缓存位于“活动”列表中,并受到保护以免被页面缓存驱逐。
  • 较冷的 1750Mb 清漆缓存位于“非活动”列表中,并且未受到驱逐保护。
  • 最冷的 6500Mb 清漆缓存并不驻留在内存中,而是驻留在磁盘的某个地方。

因此以下是大概您运行的所有命令的结果..

  1. 该文件被放入内存并被缓存,但缓存中的所有新对象都默认被发送到“非活动”列表。
  2. 这将从 varnish 缓存中移除 1750MB 的“较冷/不活动”内存,并用 catted 文件替换它。
  3. 内核现在被迫将其中 1750M 的数据写回到磁盘(在绝对最坏的情况下)。
  4. 由于您正在读取 2G 文件并写出 1750M 文件,因此 IO 等待和设备利用率会受到影响。
  5. 97%的入站请求不会受到此影响,因为它们需要页面缓存活动部分中最热的 1750Mb varnish 数据!
  6. 3% 的不幸客户端希望将数据放在较冷的缓存中。这些客户端现在会遇到延迟,因为磁盘利用率已经很高,而且它们正在排队将页面重新取回页面缓存!由于 catted 文件从未足够快地重新读取,因此页面缓存会驱逐这些页面,转而支持 3% 的需要一些较冷数据的客户端。

这绝对是最糟糕的情况。那么,从广义上讲,这会产生什么影响呢?

对于您处理的 97% 的请求而言,这不会产生可忽略的影响。

在受影响的 3% 中,预计服务的延迟会更长——大概是 500 毫秒。

但在这 3% 的不顺利请求中,约有 2%反正速度会很慢,因为他们需要从 6500Mb 缓存中获取一些内容,而这些内容无论如何都不会出现在页面缓存中!然而,他们现在确实遭受着高磁盘利用率的困扰。

因此,总结一下我所设想的和假设的例子,你会大致看到效率损失了 3% 左右。(100% 的效率意味着每个请求的所有对象都从内存中提供)。

在这个虚构的例子中,‘正常’运行的性能效率大约为 98%。

对于无法装入内存的缓存来说,这还不错!

答案2

答案取决于您的缓存使用什么存储后端。

如果您已将 varnish 配置为使用基于文件的存储,则您的文件操作可能会对性能产生影响。

在具有 4 GB RAM 的专用系统上,我建议您使用大小约为 3 GB 的“malloc”作为缓存存储空间。

看:https://www.varnish-cache.org/docs/trunk/users-guide/storage-backends.html

相关内容