禁止memcached使用SWAP

我对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即可启用。具体情况我没有深入研究、也没有实验过(验证这个问题挺麻烦的),有需要的朋友可研究一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值