解决 Redis 只读不可写的问题
来源:互联网 发布:网络流量监视软件 编辑:程序博客网 时间:2024/05/16 12:51
解决 Redis 只读不可写的问题
这一问题通报给运维后得到解决,方法是修改配置为 vm.overcommit_memory=1.
原因:
Redis 在保存数据到硬盘时为了避免主进程假死,需要 Fork 一份主进程,然后在 Fork 进程内完成数据保存到硬盘的操作,如果主进程使用了 4 GB 的内存,Fork 子进程的时候需要额外的 4 GB,此时内存就不够了,Fork 失败,进而数据保存硬盘也失败了。
Linux 内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行。
如果 vm.overcommit_memory = 1,直接放行。
vm.overcommit_memory = 0:则比较此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。
vm.overcommit_memory = 2:则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上 swap,决定是否放行。
如图提示这个错误:
[13223] 17 Mar 13:18:02.207 # 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.
错误提示明确说明了解决办法,也是设置 vm.overcommit_memory=1.
Redis内核参数overcommit_memory
它是内存分配策略可选值:0、1、2。
0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2表示内核允许分配超过所有物理内存和交换空间总和的内存
在 Redis 终端上进行读写操作,发现只读不可写,GET 操作是正常的,SET 操作提示错误:(error)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. 如图所示:
这一问题通报给运维后得到解决,方法是修改配置为 vm.overcommit_memory=1.
原因:
Redis 在保存数据到硬盘时为了避免主进程假死,需要 Fork 一份主进程,然后在 Fork 进程内完成数据保存到硬盘的操作,如果主进程使用了 4 GB 的内存,Fork 子进程的时候需要额外的 4 GB,此时内存就不够了,Fork 失败,进而数据保存硬盘也失败了。
Linux 内核会根据参数 vm.overcommit_memory 参数的设置决定是否放行。
如果 vm.overcommit_memory = 1,直接放行。
vm.overcommit_memory = 0:则比较此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。
vm.overcommit_memory = 2:则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上 swap,决定是否放行。
如图提示这个错误:
[13223] 17 Mar 13:18:02.207 # 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.
错误提示明确说明了解决办法,也是设置 vm.overcommit_memory=1.
Redis内核参数overcommit_memory
它是内存分配策略可选值:0、1、2。
0表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
1表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2表示内核允许分配超过所有物理内存和交换空间总和的内存
0 0
- 解决 Redis 只读不可写的问题
- Gentoo Linux下读写NTFS格式分区(ntfs-3g解决NTFS只读不可写的问题)
- 解决lib只读的问题
- 解决lib只读的问题
- redis应该中如何解决多写的竞争问题
- Godaddy的Windows空间只读而不可写的取消方法
- 读配置文件初始化类实例中的对外部只读不可写的公有变量。
- WIN7通过mount挂载nfs配置root权限,解决不可写的问题
- samba共享目录不可写的问题
- solaris10 home目录不可写的问题
- Ext.NETMultiCombo下拉列表 设置它的只读属性Editable 为True 好像不可以到达 只读效果问题。
- 只读,必填,combobox不可写、高度自适应
- 只读,必填,combobox不可写、高度自适应
- Oracle不可访问问题的解决
- “网络名不可再用”问题的解决
- 解决IIS"数据库或对象为只读"的问题
- SQL Server 2008 解决附加数据库为只读的问题
- 解决ubuntu下U盘变成只读的问题
- BZOJ 1068: [SCOI2007]压缩 划分DP,记忆化搜索
- 目录 (GNC) (pb-ds)
- opencv学习之仿射变换
- MDK工程的文件类型以及产生过程解析
- 取余与位运算
- 解决 Redis 只读不可写的问题
- 凌乱的yyy
- 在Nginx下配置SSL证书
- fir.im Weekly
- P1008 三连击(洛谷)
- 20170128C语言提升02_结构体和union和void
- UVa 272:TEX Quotes
- mysql索引详解
- python 8-1 如何使用多线程,Thread创建线程,执行函数赋值给target//类+函数放在run方法中执行