多语言展示
当前在线:805今日阅读:86今日分享:14

redis问题处理,经验总结

本文章主在解决使用redis的过程中遇到的各种问题,以及经验总结。(建议使用google搜索)1、解决保存快照失败后redis无法写入的问题。
工具/原料

服务器一台

方法/步骤 解决保存快照失败后redis无法写入的问题。
1

最近redis服务总是不提供服务。经过一系列的测试(增大内存,取消redis的持久化服务,换服务器,调整redis的内存分配模式,换redis的版本,),最终终于找的问题的所在,特写出来给大家做参考。

2

redis中存在一个配置属性stop-writes-on-bgsave-error,默认为yes。当bgsave保存失败后,停止接收写操作。当其他服务请求时,就会出现请求失败。

3

解决方案:1,将配置属性stop-writes-on-bgsave-error修改为no,重启redis服务。

4

解决方案:2,取消redis持久化服务。如下:save ''#save 900 1#save 300 10#save 60 10000

5

解决方案:3,可以使用以下命令临时让redis申请内存成功(系统命令)echo 1 > /proc/sys/vm/overcommit_memoryovercommit_memory解释: vm.overcommit_memory 表示内核在分配内存时候做检查的方式。这个变量可以取到0,1,2三个值。对取不同的值时的处理方式都定义在内核源码 mm/mmap.c 的 __vm_enough_memory 函数中。 取 1 的时候: 此时宏为 OVERCOMMIT_ALWAYS,函数直接 return 0,分配成功。 取 2 的时候: 此时宏为 OVERCOMMIT_NEVER,内核计算:内存总量×vm.overcommit_ratio/100+SWAP 的总量,如果申请空间超过此数值,则分配失败。vm.overcommit_ratio 的默认值为50。 取 0 的时候: 此时宏为 OVERCOMMIT_GUESS,内核计算:NR_FILE_PAGES 总量+SWAP总量+slab中可以释放的内存总量,如果申请空间超过此数值,则将此数值与空闲内存总量减掉 totalreserve_pages(?) 的总量相加。 如果申请空间依然超过此数值,则分配失败。

6

解决方案:4,解决缓存占用空间过大,导致redis持久化失败的问题。

推荐信息