今天开发突然和我说redis 不能写了。我进入redis后发现确实是这样,不可以执行set指令了。报错如下:

172.31.18.90:6379> set  test test1

(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. Please check Redis logs for details about the error.

之前redis一直是正常的。不是权限问题导致的,也不是内存耗尽

通过查看log发现是这个报错fork: Cannot allocate memory

在小内存的进程上做一个fork,不需要太多资源,但当这个进程的内存空间以G为单位时,fork就成为一件很恐怖的操作。何况在16G内存的主机上fork 14G内存的进程呢?肯定会报内存无法分配的。更可气的是,越是改动频繁的主机上fork也越频繁,fork操作本身的代价恐怕也不会比假死好多少。

找到原因之后,直接修改内核参数 vm.overcommit_memory = 1

sysctl -p 使内核参数生效

参数解释:

Linux内核会根据参数vm.overcommit_memory参数的设置决定是否放行。

如果 vm.overcommit_memory = 1,直接放行

vm.overcommit_memory = 0:则比较 此次请求分配的虚拟内存大小和系统当前空闲的物理内存加上swap,决定是否放行。

vm.overcommit_memory = 2:则会比较 进程所有已分配的虚拟内存加上此次请求分配的虚拟内存和系统当前的空闲物理内存加上swap,决定是否放行。

这里在重新发一下redis 的回写机制

Redis的数据回写机制分同步和异步两种,

同步回写即SAVE命令,主进程直接向磁盘回写数据。在数据大的情况下会导致系统假死很长时间,所以一般不是推荐的。

异步回写即BGSAVE命令,主进程fork后,复制自身并通过这个新的进程回写磁盘,回写结束后新进程自行关闭。由于这样做不需要主进程阻塞,系统不会假死,一般默认会采用这个方法。

这里注意:

在redis中运行config set stop-writes-on-bgsave-error no命令只能暂时解决不能set的问题。出了问题还是要看log的

默认配置 stop-writes-on-bgsave-error yes当bgsave出错时数据将不能修改

本文转自 shouhou2581314 51CTO博客,原文链接:http://blog.51cto.com/thedream/1944345,如需转载请自行联系原作者

工作问题之:redis 保存快照问题相关推荐

  1. Redis的快照与AOF

    为什么80%的码农都做不了架构师?>>>    我们知道,redis的数据是保存在内存里,而内存一断电就没了,所以为了数据持久化,我们得想办法把内存中的数据持久化到硬盘或者另一台机子 ...

  2. redis保存下来,自己慢慢享用

    来源:http://blog.csdn.net/zhiguozhu/article/details/50517527 感谢作者 1,Redis 丰富的数据结构(Data Structures) 字符串 ...

  3. laravel用redis保存session遇到的坑,没报错,但redis-cli就是查不到

    laravel用redis保存session遇到的坑, 配置redis存储session流程是这样的 在.evn文件中把session驱动和连接改为了redis的 如下: SESSION_DRIVER ...

  4. redis保存dataset

    公司统一走redis缓存,也将之前的memcache迁移到redis 碰到问题是redis的dataset缓存. memcache底层封装了dataset的序列化. 而redis引的DLL包,未支持. ...

  5. 如何使用Speccy保存快照

    在Speccy中"快照"是一系列有关你的计算机系统的信息.Speccy快照就类似拍一张照片,你可以在Speccy中拍你的PC的快照并保存,然后再次检查,即使在另一台PC上运行Spe ...

  6. 保存快照和撤销功能的实现方案——备忘录模式总结

    1.前言 本模式用的不是特别多,知道即可,本文主要是平时的读书笔记的整理 2.出现的动机和概念 备忘录模式--也叫 Memo 模式,或者快照模式等,顾名思义就是实现历史记录的作用,比如可以实现游戏关卡 ...

  7. 14 Redis 保存时间序列数据

    14 Redis 保存时间序列数据 前言 一.时间序列数据的读写特点 二.基于 Hash 和 Sorted Set 保存时间序列数据 三.基于 RedisTimeSeries 模块保存时间序列数据 总 ...

  8. 解决保存快照失败后redis无法写入的问题( Redis is configured to save RDB snapshots)

    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Com ...

  9. Redis 的快照为什么不会阻塞其他请求?

    虽然我们经常将 Redis 看做一个纯内存的键值存储系统,但是我们也会用到它的持久化功能,RDB 和 AOF 就是 Redis 为我们提供的两种持久化工具,其中 RDB 就是 Redis 的数据快照. ...

最新文章

  1. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
  2. 日期和时间规范函数 (Entity SQL)
  3. 5.1.2 IO控制器
  4. TCP释放连接后实现端口的立即复用
  5. Zookeeper和kafka在linux环境下的安装
  6. [前端优化]使用Microsoft Ajax Minifier对资源文件进行压缩优化
  7. 算法移植优化(三)android dlib 人脸检测使用
  8. mysql 权限信息存储库_springboot-security02FromDB 权限管理(用户信息和角色信息保存在数据库)详解...
  9. SpringCloud Feign使用详解
  10. ExtJs视频教程1(陈治文)
  11. 关于MATLAB给多条曲线命名和划定网格
  12. 用户界面之工具栏详解-AutoRunner自动化测试工具
  13. 磁性能测试标准和项目有哪些
  14. 自定义QLabel 控件
  15. SqlServer——正则表达式
  16. 南京美食指南(完美篇)
  17. Java实现字典树 Trie
  18. ADOBE pr000的下载安装+基本操作
  19. python股票数据分析_用Python浅析股票数据
  20. iframe的滚动条隐藏后仍可滑动

热门文章

  1. 第五章 Python数据结构
  2. 梯度下降(Gradient Descent),一句代码,一个式子
  3. 编程之美-寻找最大的k个数
  4. 不是外链没用,而是你发的外链没用
  5. 上拉加载你这个坑货~
  6. shell中if条件之数值的比较方法
  7. 中小企业如何用在线CRM留住客户
  8. 关于DataGridView的数据源绑定字符串两个值得注意的问题
  9. 解读高效的神经架构搜索ENAS
  10. 深度强化学习-马尔科夫决策过程和表格型方法