Redis 入门到分布式 (六)常见的持久化开发运维问题
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
一、常见问题目录
- fork操作
- 进程外开销
- AOF追加阻塞
- 单机多实例部署
二、 fork
1、Fork操作
1.同步操作:Fork操作只是做内存页的拷贝,而不是做整个内存的拷贝,所以说,大部分情况下速度是非常快的,但是如果本身的fork操作比较慢,或者是卡在了某个地方,那么它就会阻塞redis的主线程。
2. 与内存量息息相关:内存越大,耗时越长(与机器类型有关)
3. Info:latest_fork_usec
该参数用来查上一次持久化的执行时间,用来辅助对持久化文件内存相关信息进行监控
2、改善fork
- 优先使用物理机或者高效支持fork操作的虚拟化技术
- 控制Redis实例最大可用内存:maxmemory
- 合理配置Linux内存分配策略:vm.overcommit_memory=1
- 降低fork频率:例如放宽AOF重写自动触发时机,不必要的全量复制
三、子进程开销和优化
1、CPU:
开销: RDB和AOF文件生成,属于CPU密集型
开销主要体现在对文件的重写,也就是对硬盘的写操作;同时,它本身也是一个CPU密集型的操作;子进程的开销一般可达到90%以上。
优化:不做CPU绑定,不和CPU密集型部署
这样可以保证不会产生CPU密集型的竞争。
2、内存:
开销: fork 内存开销,copy-on-write.
fork内存开销,基本上大部分集中于客户端有写入操作创建子线程进行刷数据到硬盘的时候。
优化:echo never > /sys/kernel/mm/transparent_hugepage/enabled
优化:不允许单机作部署时发生大量的重写,这样内存的消耗比较小
3、硬盘
开销: AOF和RDB 文件写入,可以结合iostat,iotop分析
硬盘优化:
1) 不要和高硬盘负载服务部署一起 : 存储服务、消息队列等
2) no-appendfsync-on-rewrite = yes
3) 根据写入量决定磁盘类型:例如ssd
4)单机多实例持久化文件目录可以考虑分盘
四、AOF阻塞
1、AOF追加阻塞
如果我们使用AOF进行持久化,那么,一般会使用呢每秒刷盘的策略。
分析:
主线程将数据加载到缓冲区,同时它还有一个AOF同步线程,去负责每秒同步刷盘操作,
主线程还会负责一项工作,主线程会对比上次AOF同步的时间,如果上次同步时间在两秒之内,主线程就会返回;如果距离上次同步时间超过了两秒,主线程会阻塞,直到同步完成。
实际上,这也是为了达到保证AOF同步安全的一种策略,所以为了达到这一目的,它会一直阻塞直到达到同步完成。
但是,这里会产生两个问题:
1)主线程是不能阻塞的
因为主线程要负责日常命令的处理,是非常宝贵的资源,
2)每秒刷盘的策略可能不只会丢失一秒,而是可能会丢失两秒的数据
2、AOF阻塞定位
1)定位方法1:
查看redis日志:
在redis日志中,有这么一段,它会告诉你,你的异步AOF同步可能花了太长时间了,你的磁盘是不是有问题,而且这个过程有可能拖慢你的redis。
2)定位方法2:
通过命令查看:
info Persistence
Redis 入门到分布式 (六)常见的持久化开发运维问题的更多相关文章
- Redis入门到高可用(十七)—— 持久化开发运维常见问题
1.fork操作 2.子进程开销和优化 3.AOF阻塞
- Redis 入门到分布式 (八)Redis Sentinel
个人博客网:https://wushaopei.github.io/ (你想要这里多有) sentinel-目录 主从复制高可用 安装配置 实现原理 架构说明 客户端连接 常见开发运维问题 一. ...
- Redis 入门到分布式 (七)Redis复制的原理与优化
一.目录 Redis复制的原理与优化 什么是主从复制 全量复制和部分复制 复制的配置 故障处理 开发运维常见问题 二. 什么是主从复制 1.单机有什么问题? 单机如果机器故障,那么久无法及时提供服务: ...
- redis 学习(20)-- 常见的持久化开发与运维问题
常见的持久化开发与运维问题 fork 操作 fork 操作是一个同步操作,若执行较慢会阻塞 redis 主线程 执行时间与内存量相关:内存越大,耗时越长:虚拟机较慢,真机较快 查看 fork 执行时间 ...
- Redis详解(六)------ RDB 持久化
前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,has ...
- redis入门指南(六)—— 集群
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 配置集群 1.配置集群,集群解决了单点故障以及单台机器内存上限的问题,使用集群时,只需要将配置文 ...
- Redis 入门到分布式 (五) Redis持久化的取舍和选择
个人博客网:https://wushaopei.github.io/ (你想要这里多有) Redis持久化的取舍和选择 持久化的作用 RDB AOF RDB和AOF的选择 一.持久化的作用 ...
- 一站式学习Redis 从入门到高可用分布式实践(慕课)第六章 Redis开发运维常见问题
fork操作 1.同步操作 2.与内存量息息相关:内存越大,耗时越长(与机器类型有关) 3.info:latest_fork_usec 进程外开销 AOF追加阻塞 不知道哪个命令??? 单机多实例部署 ...
- Redis 入门到分布式 (四) 瑞士军刀Redis其他功能
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 目录: 慢查询 Pipeline 发布订阅 Bitmap(位图) HyperLogLog GEO 一.慢 ...
随机推荐
- 带你看看Java的锁(三)-CountDownLatch和CyclicBarrier
带你看看Java中的锁CountDownLatch和CyclicBarrier 前言 基本介绍 使用和区别 核心源码分析 总结 前言 Java JUC包中的文章已经写了好几篇了,首先我花了5篇文章从源 ...
- Viterbi-Algorithm(维特比)算法
CSDN博客:皮乾东 知乎:Htrying 微博:Htring的微博 微信公众号:自然语言处理爱好者(ID:NLP_lover) 文章来自:<数学之美> Viterbi-Algor ...
- python--正则表达式中(.)(*)(.*?)以及re.S的认识
https://yiyibooks.cn/xx/python_352/library/re.html 看command: #-*-coding:gb2312-*- __author__ = 'fuda ...
- PHPExcel生成Excel文件---提示导出文件或者文件扩展名不一致,或导出的文件或文件扩展名无效
$data = Db::name('shop_cart')->where('phone','15555555555')->select(); $objPHPExcel = new PHPE ...
- C# 数据操作系列 - 7. EF Core 导航属性配置
在上一篇,大概介绍了Entity Framework Core关于关系映射的逻辑.在上一篇中留下了EF的外键映射没有说,也就是一对一,一对多,多对一,多对多的关系等.这一篇将为大家细细分析一下,如何设 ...
- vue 升级element-ui woff文件404
一.build文件下utils.js下增加 publicPath:'../../' 二. 同样的代码环境,用yarn来安装依赖后启动运行正常,而采用npm安装依赖则有类似问题.当然,这个和yarn或者 ...
- spark机器学习从0到1支持向量机SVM(五)
分类 分类旨在将项目分为不同类别. 最常见的分类类型是二元分类,其中有两类,通常分别为正数和负数. 如果有两个以上的类别,则称为多类分类. spark.mllib支持两种线性分类方法:线性支持 ...
- 微信小程序var和let以及const有什么区别
微信小程序var和let以及const的区别: 在JavaScript中有三种声明变量的方式:var.let.const. var:声明全局变量,换句话理解就是,声明在for循环中的变量,跳出for循 ...
- SQL拦截器
一.拦截SQL 1.slow log 2.general log 3.mycat sql拦截器 二.mycat sql拦截器 1.配置server.xml # 1.5可用 <system> ...
- ajax提交可以上传文件的form表单
var formData = new FormData($( "#fm")[0]); $.ajax({ url: 'webnavigationcw ...