redis运行一段时间之后假死

  • 现象:redis运行一段时间之后就会出现假死的现象

    • 假死指的是:进程在、pid在、telnet 端口是通的、redis-cli命令可以连接,但无法查询数据,查询的时候报错,如下图: 
    • 可以看到这个报错是有关权限的,但可以确认该redis并没有设置密码,况且已经运行了一段时间之后,突然开始不正常的
  • 尝试解决:

    • 观察redis的运行日志发现在重启redis的时候会有warning,如下图 
    • 因为没有报错所有先解决warning,然后经过各种尝试,得解决方案如下:
    1. 修改内核参数,3种方法,任选其一: 
        1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效 
        2)sysctl vm.overcommit_memory=1 
        3)echo 1 > /proc/sys/vm/overcommit_memory 
    2. 修改redis.conf,然后重启redis 
        maxmemory 3G
        maxmemory-policy allkeys-lru 
        maxmemory-samples 3