根据这个线程(不是很可靠,我知道)memcached 不使用磁盘,甚至不使用虚拟内存。
我的问题是:
这是真的?
如果是这样,memcached 如何确保分配给他的内存永远不会溢出到磁盘?
memcached
避免通过两种机制进行交换:
通知系统管理员机器不应该去交换。这允许管理员可能不为机器配置交换空间(对我来说似乎是个坏主意)或配置正在运行的应用程序的内存限制以确保没有任何东西进入交换。(不仅仅是memcached
,而是所有应用程序。)
mlockall(2)
可以使用系统调用 ( )-k
来确保所有进程的内存始终锁定在内存中。这是通过setrlimit(2)
RLIMIT_MEMLOCK
控件调节的,因此管理员需要进行修改,例如/etc/security/limits.conf
允许memcached
用户帐户锁定比正常情况更多的内存。(锁定内存是为了防止不受信任的用户帐户使系统的其余部分缺乏可用内存。)
假设机器的目的是运行,这两个步骤都是公平的memcached
,也许其他的很少。这通常是一个公平的假设,因为更大的部署将把多台(或多台)机器专用于memcached
.
您将 memcached 配置为使用固定数量的内存。当该内存已满时,memcached 只会删除旧数据以保持在限制之下。就是这么简单。