Redis:BGSAVE出错原因分析
2015-08-17 18:53
417 查看
原因:
1.dump.rdb文件所在的文件夹权限没有开通,导致dump.rdb文件停止更新,此时修改redis数据时会报错,原因是默认配置 stop-writes-on-bgsave-error yes当bgsave出错时数据将不能修改如下操作后可以更新数据: config set stop-writes-on-bgsave-error nodump.rdb文件也恢复更新
2.当redis的内存占用比较大时,在上述操作后dump.rdb文件仍然停止更新,并且slave服务器也不能同步,原因是操作系统的vm.overcommit_memory配置(配置说明在最后),如下操作:
echo 1 > /proc/sys/vm/overcommit_memory
后dump.rdb文件恢复更新。slave也可以同步数据了。
3.当使用root用户启动redis时没有上述问题
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(?) 的总量相加。如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
1.dump.rdb文件所在的文件夹权限没有开通,导致dump.rdb文件停止更新,此时修改redis数据时会报错,原因是默认配置 stop-writes-on-bgsave-error yes当bgsave出错时数据将不能修改如下操作后可以更新数据: config set stop-writes-on-bgsave-error nodump.rdb文件也恢复更新
2.当redis的内存占用比较大时,在上述操作后dump.rdb文件仍然停止更新,并且slave服务器也不能同步,原因是操作系统的vm.overcommit_memory配置(配置说明在最后),如下操作:
echo 1 > /proc/sys/vm/overcommit_memory
后dump.rdb文件恢复更新。slave也可以同步数据了。
3.当使用root用户启动redis时没有上述问题
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(?) 的总量相加。如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
相关文章推荐
- redis安装问题小结
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法
- 为啥懒 Redis 是更好的 Redis
- 在Redis数据库中实现分布式速率限制的方法
- redis2.8配置文件中文翻译版
- 详解Redis使用认证密码登录
- Redis 在真实世界的 5 个用法