Memcached和虚拟内存

4
根据 此帖子(不太可靠,我知道),memcached 不使用磁盘,甚至不使用虚拟内存。
我的问题是:
  1. 这是真的吗?
  2. 如果是,memcached 如何确保分配给它的内存永远不会溢出到磁盘上?

正如链接的帖子所表明的那样,问题基于一个误解。虚拟存储器不同于分页或交换。请注意它说:“我假设您实际上是指'memcached是否不将数据分页到磁盘上'” - David Schwartz
2个回答

4

memcached通过两种机制避免进入swap:

  1. 向系统管理员告知这些机器不应该进入swap。这使得管理员可以不为机器配置swap空间(这对我来说似乎是个坏主意),或者配置正在运行的应用程序的内存限制,以确保没有东西会进入swap。(不仅仅是 memcached ,而是所有应用程序)。

  2. 可以使用mlockall(2)系统调用(-k)来确保所有进程的内存始终锁定在内存中。这是通过setrlimit(2)RLIMIT_MEMLOCK 控制来实现的,因此管理员需要修改例如/etc/security/limits.conf 以允许memcached用户账户锁定比正常情况下更多的内存。(锁定的内存是受到调节的,以防止不受信任的用户帐户使系统剩余的自由内存不足。)

这两步骤都是公平的假设这台机器的目的是运行memcached,并且可能几乎没有其他用途。这通常是一个合理的假设,因为更大的部署将专用于几台(或许很多)机器运行memcached


1

您可以配置memcached使用固定的内存量。当内存已满时,memcached会删除旧数据以保持在限制范围内。就是这么简单。


1
memcached确实使用虚拟内存,但它不会(故意地)分页到磁盘。然而,这并不是memcached的选择。操作系统决定何时以及如何进行分页。幸运的是,如果内存限制没有设置得太高,系统上永远不会有内存压力,因此操作系统不需要将数据分页出去。 - usr
2
由于memcached是缓存而不是数据库,因此它可以在认为需要时随时删除您的数据。 - usr
你的回答没有解释如果内存压力很高会发生什么。 - Konstantin Pelepelin
1
@checat 我想我说了那句话。它会删除数据。 - usr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接