zoukankan      html  css  js  c++  java
  • 为什么 Redis 重启后没有正确恢复之前的内存数据

    安装 Redis 后,默认配置下启动会得到如下日志: 

    [3077] 05 Sep 10:01:54.181 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition.
    To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

          该输出信息大致的意思是: overcommit_memory 值目前设置为 0 !在可用内存比较少时,后台执行的 save 命令可能会失败。为了修复该问题,需要添加 'vm.overcommit_memory  = 1' 到 /etc/sysctl.conf 文件中,并 通过 重启系统或执行 'cysctl vm.overcommit_memory=1' 命令使得该配置生效。 

    网络对于上面vm.overcommit_memory的值解释:

    0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,则允许内存申请;否则,内存申请失败,并把错误返回给应用进程。
    1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
    2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

    Redis的数据回写机制分同步和异步两种:

    1. 同步回写即SAVE命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的。
    2. 异步回写即BGSAVE命令,主进程fork后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死,一般默认会采用这个方法。
    找到原因之后,直接修改/etc/sysctl.conf内核参数
    vm.overcommit_memory= 1 sysctl -p ##生效配置
  • 相关阅读:
    jmeter解决乱码
    RedisTemplate方法详解
    linux centos7忘记密码?
    redis config 详解
    Spring Security使用详解(基本用法 )
    Oauth介绍
    springSecurity+Oauth2.0之授权模式(客户端、密码模式)
    springCloud Sleuth分布式请求链路跟踪
    spring cloud Stream消息驱动
    HttpServletResponse
  • 原文地址:https://www.cnblogs.com/dadonggg/p/8630840.html
Copyright © 2011-2022 走看看