redis 学习(20)-- 常见的持久化开发与运维问题
常见的持久化开发与运维问题
fork 操作
fork 操作是一个同步操作,若执行较慢会阻塞 redis 主线程
执行时间与内存量相关:内存越大,耗时越长;虚拟机较慢,真机较快
查看 fork 执行时间,可做监控
info : latest_fork_usec 上一次执行fork的微秒数
改善 fork
优先使用物理机或者高效支持fork操作的虚拟化技术
控制 Redis 实际最大可用内存:maxmemory
合理配置 Linux 内存分配策略
vm.overcommit_memory = 1默认这个值为 0,表示当发现没有足够内存做内存分配的时候,就不去分配。在内存比较低的时候,会发生fork 阻塞。设置为 1 表示认为机器有足够内存,来做内存分配。
降低 fork 频率:例如放宽 AOF 重写自动触发时机,不必要的全量复制
子进程开销和优化
- CPU 开销
- RDB 和 AOF 都会生成文件,属于 CPU 密集型
- 优化1:不做 CPU 绑定,不和 CPU 密集型的应用部署在同一台服务器上
- 优化2:避免在单机多部署的场景大量发生 AOF 重写
- 内存
- 开销:fork内存开销,copy-on-write,子进程会共享父进程的物理内存页,当父进程执行写请求的时候会创建一个副本,此时会消耗内存。即父进程在大量写入的时候,子进程开销会比较大,创建副本。
- 优化1:防止单机多部署的时候发生大量的重写
- 优化2:
echo never > /sys/kernel/mm/transparent_hugepage/enabled- Linux 内核的 2.6.38 版本中增加以上配置,支持大的内存页的分配
- 内存页分配越大,会提高创建副本页的大小,影响性能
- 硬盘
- 开销:RDB 与 AOF 文件写入的场景,可以结合 iostat、iotop 工具进行分析
- 优化1:不要和高硬盘负载服务部署在一起,例如存储服务、消息队列
- 配置:
no-appendfsync-on-rewrite = yes - 根据写入量决定磁盘类型:例如 SSD
- 单机多实例持久化目录可以考虑分盘以及做资源限制,例如 cgroup
AOF 追加阻塞
Redis在执行 fsync 的时候,redis 为了保证 AOF 文件安全性,会校验上次 fsync 的时间是否大于2秒。若超过2秒,会发生阻塞。

AOF 阻塞定位
通过Redis日志进行定位。出行这行,即发生阻塞:
Asynchronous AOF fsync is taking too long (disk is busy?)
Writing the AOF buffer without waiting for fsync to complete,this may show down Redis
通过
info persistence命令进行查看:每发生一次,aof_delayed_fsync会增 1 。

如图,aof_deloayed_fsync:0,说明 aof 并没有发生阻塞。
- 通过
df -h和du -sh统计整体磁盘情况和查看单独目录点用情况。
优化方法可以参考硬盘优化策略。
redis 学习(20)-- 常见的持久化开发与运维问题的更多相关文章
- Redis开发与运维学习笔记
<Redis开发与运维>读书笔记 一.初始Redis 1.Redis特性与优点 速度快.redis所有数据都存放于内存:是用C语言实现,更加贴近硬件:使用了单线程架构,避免了多线程竞争 ...
- Redis学习笔记六:持久化实验(AOF,RDB)
作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...
- Redis开发与运维:SDS
STRING 我们会经常打交道的string类型,在redis中拥有广泛的使用.也是开启redis数据类型的基础. 在我最最开始接触的redis的时候,总是以为字符串类型就是值的类型是字符串. 比如: ...
- 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙
这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...
- Redis学习总结(1)——数据持久化
以前研究Redis的时候,很多东西都不太明白,理解得也不太深,现在有时间重新拾起来看看,将一些心得记录下来,希望和大家一起探讨. 一.简介 Redis是一个单线程高可用的Key-Value存储系统,和 ...
- 《Redis开发与运维》
第1章 初识Redis 1. Redis介绍: Redis是一种基于键值对(key-value)的NoSQL数据库. 与很多键值对数据库不同的是,Redis中的值可以是由string(字符串).has ...
- Redis实战(七)Redis开发与运维
Redis用途 1.缓存 Redis提供了键值过期时间设置, 并且也提供了灵活控制最大内存和内存溢出后的淘汰策略. 可以这么说, 一个合理的缓存设计能够为一个网站的稳定保驾护航. 2.排行榜系统 Re ...
- Redis 开发与运维
Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...
- 《Redis开发与运维》快速笔记(一)
1.前言&基本介绍 在原始的系统架构中,我们都由程序直接连接DB,随着业务的进一步开展,DB的压力越来越大,为了缓解DB的这一压力,我们引入了缓存,在程序连接DB中加入缓存层, 从而减轻数据库 ...
随机推荐
- Python可变参数函数用法详解
来自:http://c.biancheng.net/view/2257.html 很多编程语言都允许定义个数可变的参数,这样可以在调用函数时传入任意多个参数.Python 当然也不例外,Python ...
- 在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型
1) 在默认情况下,springmvc不能将String类型转成java.util.Date类型,所有我们只能在Action 中自定义类型转换器 <form action="${pa ...
- Python写的大小写转换小工具
几行代码的小工具,用于进行如下转换 TRANSACTIONS ON CLOUD COMPUTING => Transactions On Cloud Computing orig = 'TRAN ...
- SEO中常用的301永久重定向代码大全
301是永久重定向的意思,表示请求的网页已永久移动到新位置,服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置.其实301重定向在SEO中被广泛应用,也是被广泛认为比 ...
- 更改mysql 数据库 utf8
mysql> alter database 数据库名 character set utf8;
- Canal——增量同步MySQL数据到ElasticSearch
1.准备 1.1.组件 JDK:1.8版本及以上: ElasticSearch:6.x版本,目前貌似不支持7.x版本: Kibana:6.x版本: Canal.deployer:1 ...
- Product - 产品经理 - 内容
特别说明 本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达. - ISBN: 9787568041591 - https://book.douban. ...
- axios中的qs介绍
首先qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 地址: https://www.npmjs.com/package/qs qs.parse().qs.string ...
- 【计算机视觉】【并行计算与CUDA开发】GPU硬解码---DXVA
前面介绍利用NVIDIA公司提供的CUVID库进行视频硬解码,下面将介绍利用DXVA进行硬解码. 一.DXVA介绍 DXVA是微软公司专门定制的视频加速规范,是一种接口规范.DXVA规范制定硬件加速解 ...
- 【VS开发】CListCtrl控件使用
为何调用了CListCtrl的InsertColumn却什么效果都没有?这个问题以前发现过,今天才清楚,那就是要把它的Style指定为LVS_REPORT. 具体做法如下: 假 ...