Memcached如何确保其内存中的页面不会被其他页面换出?

时间:2013-02-09 04:33:20

标签: c++ caching web-applications memcached scalability

所以我试图加速我的数据库驱动的网站,我遇到了memcached,我可以用它来“缓存”来自内存中数据库的频繁键/值。我的问题是,如何将数据强制保留在内存中,因为通常如果服务器正在运行其他应用程序,则有可能将memcached哈希表(或其中的一部分)写回到硬盘(如果是页面)从另一个应用程序替换memcached中的页面。那么在行业中,他们是否只有运行memcached的独立机器?或者他们是否调整操作系统内部,以便memcached中的页面不会被换出?

这个问题可以推广到任何其他应用程序,知道如何强制数据留在内存中是非常有益的。

2 个答案:

答案 0 :(得分:2)

默认情况下,如果您的计算机使用的物理内存多于可用内存,则memcached页面将被换出到硬盘。您可以指定-k参数,但要指定m​​emcached使用的页面使用mlockall()锁定到物理内存中。有关如何执行此操作的详细信息,请参阅此博客文章。

http://threebrothers.org/brendan/blog/using-memcached-k-prevent-paging/

答案 1 :(得分:0)

OS编写者多年来编写了很好的分页算法;经历了时间考验的算法。分页算法尝试优化它交换的页面。

'强制数据留在内存中是非常有益的' - 确定吗?您是否希望更换Apache代码,而不是一小时内未使用的数据页?如果Apache换出,谁会使用这些数据?

设计胜过本机操作系统分页算法的东西是很困难的。可以做到,但通常需要的不仅仅是为1个程序锁定内存。

我建议适当地设置memcache大小,以便机器不使用分页。

如果你只在系统上运行memcache,很多人都这样做,那么就没有必要使用-k开关了。或者该机器可以设置为swap = 0。