redis:RDB快照失败问题排查与处理
来源:互联网 发布:麻瓜编程 编辑:程序博客网 时间:2024/06/18 06:55
redis快照问题错误信息如下:
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
排查与解决步骤:
进入redis使用info命令查看,会发现最后一次快照失败的信息
rdb_last_bgsave_status:err
原因可能2种
1.磁盘满了
2.内存不足
结合日志查看,是内存不足的原因
处理方法:
1.进入redis临时关闭配置(如果需要,要再redis.conf上写上该配置,不然下次重启redis配置会失效)
config set stop-writes-on-bgsave-error no
2.长远
(1)可以的话尝试预留出足够的内存空间,
(2)不然的话,可以使用以下命令临时让redis申请内存成功(系统命令)
echo 1 > /proc/sys/vm/overcommit_memory
overcommit_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(?) 的总量相加。
如果申请空间依然超过此数值,则分配失败。
以上为粗略描述,在实际计算时,如果非root进程,则在计算时候会保留3%的空间,而root进程则没有该限制。详细过程可看源码。
- redis:RDB快照失败问题排查与处理
- Redis的RDB(快照)与AOF
- Redis--rdb快照恢复
- Redis rdb快照持久化
- redis 快照 RDB和AOF
- redis:RDB快照失败,MISCONF Redis is configured to save RDB snapshots, but is currently not able to persis
- [Redis]Redis持久化之RDB快照
- redis快照文件dump.rdb解析工具--redis-rdb-tools
- redis 配置文件 snapshotting RDB数据库快照部分
- redis 配置文件 snapshotting RDB数据库快照部分
- redis的rdb快照持久化
- Redis之rdb快照持久化
- RDB 快照
- 解决保存快照失败后redis无法写入的问题
- Redis rdb dump的问题
- Redis存储RDB与AOF
- redis 性能问题排查
- rdb快照持久化
- ios10.3之CoreData的详细教程
- Java知识(数组)
- HDU5293:Tree chain problem(树形dp & LCA)
- 想成为嵌入式程序员应知道的
- shell脚本实现希尔(shell)排序
- redis:RDB快照失败问题排查与处理
- TCP
- OpenCV学习——对富特征进行光流匹配
- 腾讯libco实现原理分析
- java(6)数组
- 史上最全最丰富的“最长公共子序列”、“最长公共子串”问题的解法与思路
- HightCharts应用实例
- TrickGCD hdu6053
- java 方法重写和重载