美文网首页
Redis持久化磁盘IO方式及其带来的问题

Redis持久化磁盘IO方式及其带来的问题

作者: 闯爷 | 来源:发表于2016-05-08 00:28 被阅读743次

原文:http://www.easytd.com/chengxudaima/d_14102600199.html

有Redis线上运维经验的人会发现Redis在物理内存使用比较多,但还没有超过实际物理内存总容量时就会发生不稳定甚至崩溃的问题,有人认为是 基于快照方式持久化的fork系统调用造成内存占用加倍而导致的,这种观点是不准确的,因为fork 调用的copy-on-write机制是基于操作系统页这个单位的,也就是只有有写入的脏页会被复制,但是一般你的系统不会在短时间内所有的页都发生了写 入而导致复制,那么是什么原因导致Redis崩溃的呢?

答案是Redis的持久化使用了Buffer IO造成的,所谓Buffer IO是指Redis对持久化文件的写入和读取操作都会使用物理内存的Page Cache,而大多数数据库系统会使用Direct IO来绕过这层Page Cache并自行维护一个数据的Cache,而当Redis的持久化文件过大(尤其是快照文件),并对其进行读写时,磁盘文件中的数据都会被加载到物理内 存中作为操作系统对该文件的一层Cache,而这层Cache的数据与Redis内存中管理的数据实际是重复存储的,虽然内核在物理内存紧张时会做 Page Cache的剔除工作,但内核很可能认为某块Page Cache更重要,而让你的进程开始Swap ,这时你的系统就会开始出现不稳定或者崩溃了。我们的经验是当你的Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了。

下图是Redis在读取或者写入快照文件dump.rdb后的内存数据图:

总结:

1 根据业务需要选择合适的数据类型,并为不同的应用场景设置相应的紧凑存储参数。

2 当业务场景不需要数据持久化时,关闭所有的持久化方式可以获得最佳的性能以及最大的内存使用量。

3 如果需要使用持久化,根据是否可以容忍重启丢失部分数据在快照方式与语句追加方式之间选择其一,不要使用虚拟内存以及diskstore方式。

4 不要让你的Redis所在机器物理内存使用超过实际内存总量的3/5。

相关文章

  • Redis持久化磁盘IO方式及其带来的问题

    原文:http://www.easytd.com/chengxudaima/d_14102600199.html ...

  • redis之持久化

    什么是 redis 持久化?持久化方式和优缺点 redis 持久化就是把内存中的数据写到磁盘里,防止服务器宕机后内...

  • 【Java进阶营】Redis技术专题系列之帮你从底层彻底吃透AO

    AOF持久化方式 AOF持久化方式是将redis的操作日志以追加的方式写入磁盘文件中。AOF持久化是以日志的形式记...

  • Redis持久化

    redis持久化方式 redis的持久化,是将内存中的数据写入到磁盘中,有两种方式: 1. RDB快照 (1)re...

  • 一些Redis知识点记录

    Redis 数据存放在内存中,需要配置持久化将数据保存在磁盘上,redis提供两种方式进行持久化: 1、RDB持久...

  • Redis持久化、虚拟内存、哨兵模式

    持久化 父子进程、aof的日志重写、异步方式写入磁盘 redis支持两种方式的持久化:RDB快照方式,将内存中的数...

  • Redis 持久化

    redis持久化的方式有两种,通过 RDB 或 AOF,都可以将 redis 内存中的数据给持久化到磁盘上面来 R...

  • 2020-02-21 记录redis(8)

    redis持久化,两种持久化方式: RDB方式 AOF方式 持久化的使用方式: RDB 优势: 1、redis的数...

  • Redis——持久化

    持久化 :持久化也就是说Redis所有数据保持在内存中,对数据的更新将异步的保存在磁盘中。-持久化方式RDB(快照...

  • 3.redis持久化策略

    1.持久化概念: redis支持 将内存中的数据持久化到磁盘中,在下次启动redis时可以将磁盘中的数据加载到内存...

网友评论

      本文标题:Redis持久化磁盘IO方式及其带来的问题

      本文链接:https://www.haomeiwen.com/subject/ibdsrttx.html