• 解决 Redis 只读不可写的问题


    本文转载:https://blog.csdn.net/han_cui/article/details/54767208?tdsourcetag=s_pcqq_aiomsg

    解决 Redis 只读不可写的问题
    在 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. 如图所示:

    原因:


    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表示内核允许分配超过所有物理内存和交换空间总和的内存

  • 相关阅读:
    git创建、删除分支
    Git 基础
    python pillow
    phantomjs 下载
    python3安装PIL
    selenium打开chrome时,出现 "您使用的是不受支持的命令行标记:--ignore-certificate-errors""
    chrome driver 下载
    go 单进程并发
    go 内嵌对象类型
    go 多态
  • 原文地址:https://www.cnblogs.com/cq-yangzhou/p/10189443.html
Copyright © 2020-2023  润新知