禁止memcached使用SWAP

来源:互联网 发布:软件开发视频教程 编辑:程序博客网 时间:2024/04/29 12:19
我对memcached不是很熟悉,只会基本的使用,但常听到人们讨论memcached使用SWAP的问题。一种说法是memcached使用SWAP可能会导致memcached拒绝连接,对此我不太了解,也无法理解:SWAP对应用程序来说应该是透明的,不应该导致程序出现异常反应。但SWAP导致memcached响应变慢,那是板上钉钉的事实。有些人为了防止memcached使用SWAP,在系统中禁止SWAP,造成系统内存不足时宕机,真是得不偿失。我不太同意在系统中禁用SWAP、或者是把SWAP设置得很小的做法。SWAP导致程序运行变慢,但总比程序不能运行或系统崩溃要好。
其实在linux系统中,可以使用mlockall系统调用阻止程序使用SWAP:
mlock()  and  mlockall()  respectively  lock part or all of the calling process's virtual address space into RAM, preventing that memory from being paged to the swap area.
按理说只要在memcached进程内调用mlockall,memcached就不会使用到SWAP。grep一下memcached源码就知道memcached有使用mlockall,但必须在启动时加上-k参数:
int main (int argc, char **argv) {  bool lock_memory = false;  ......  while (-1 != (c = getopt(argc, argv, ......)) {    switch (c) {    ......    case 'k':      lock_memory = true;      break;    ......    }  }  ......  if (lock_memory) {    int res = mlockall(MCL_CURRENT | MCL_FUTURE);  ......}
从memcached的帮助可以看到-k参数的说明:
-k     Lock  down  all  paged  memory. This is a somewhat dangerous option with large caches, so consult the README and memcached homepage for configuration suggestions.
帮助说明memcache已经提供了禁止程序使用SWAP的功能,只需加参数-k即可启用。具体情况我没有深入研究、也没有实验过(验证这个问题挺麻烦的),有需要的朋友可研究一下。
原创粉丝点击