个人博客网:https://wushaopei.github.io/    (你想要这里多有)

一、常见问题目录

  1. fork操作
  2. 进程外开销
  3. AOF追加阻塞
  4. 单机多实例部署

二、 fork

1、Fork操作

1.同步操作:Fork操作只是做内存页的拷贝,而不是做整个内存的拷贝,所以说,大部分情况下速度是非常快的,但是如果本身的fork操作比较慢,或者是卡在了某个地方,那么它就会阻塞redis的主线程。

2. 与内存量息息相关:内存越大,耗时越长(与机器类型有关)

3. Info:latest_fork_usec

该参数用来查上一次持久化的执行时间,用来辅助对持久化文件内存相关信息进行监控

2、改善fork

  1. 优先使用物理机或者高效支持fork操作的虚拟化技术
  2. 控制Redis实例最大可用内存:maxmemory
  3. 合理配置Linux内存分配策略:vm.overcommit_memory=1
  4. 降低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 入门到分布式 (六)常见的持久化开发运维问题的更多相关文章

  1. Redis入门到高可用(十七)—— 持久化开发运维常见问题

    1.fork操作 2.子进程开销和优化 3.AOF阻塞

  2. Redis 入门到分布式 (八)Redis Sentinel

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) sentinel-目录 主从复制高可用 安装配置 实现原理 架构说明 客户端连接 常见开发运维问题 一. ...

  3. Redis 入门到分布式 (七)Redis复制的原理与优化

    一.目录 Redis复制的原理与优化 什么是主从复制 全量复制和部分复制 复制的配置 故障处理 开发运维常见问题 二. 什么是主从复制 1.单机有什么问题? 单机如果机器故障,那么久无法及时提供服务: ...

  4. redis 学习(20)-- 常见的持久化开发与运维问题

    常见的持久化开发与运维问题 fork 操作 fork 操作是一个同步操作,若执行较慢会阻塞 redis 主线程 执行时间与内存量相关:内存越大,耗时越长:虚拟机较慢,真机较快 查看 fork 执行时间 ...

  5. Redis详解(六)------ RDB 持久化

     前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,has ...

  6. redis入门指南(六)—— 集群

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 配置集群 1.配置集群,集群解决了单点故障以及单台机器内存上限的问题,使用集群时,只需要将配置文 ...

  7. Redis 入门到分布式 (五) Redis持久化的取舍和选择

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) Redis持久化的取舍和选择 持久化的作用 RDB AOF RDB和AOF的选择 一.持久化的作用   ...

  8. 一站式学习Redis 从入门到高可用分布式实践(慕课)第六章 Redis开发运维常见问题

    fork操作 1.同步操作 2.与内存量息息相关:内存越大,耗时越长(与机器类型有关) 3.info:latest_fork_usec 进程外开销 AOF追加阻塞 不知道哪个命令??? 单机多实例部署 ...

  9. Redis 入门到分布式 (四) 瑞士军刀Redis其他功能

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 目录: 慢查询 Pipeline 发布订阅 Bitmap(位图) HyperLogLog GEO 一.慢 ...

随机推荐

  1. django开发最完美手机购物商城APP带前后端源码

    后端和数据接口,全采用django开发 从0到大神的进阶之路 一句话,放弃单文件引用vue.js练手的学习方式 马上从vue-cli4练手,要不然,学几年,你也不懂组件式开发,不懂VUEX,不懂路由, ...

  2. STM32 TIM1高级定时器配置快速入门

    layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 重点内容 时基单元 计 ...

  3. 简述异步编程&Promise&异步函数

    前言:文章由本人在学习之余总结巩固思路,不足之前还请指出. 一.异步编程 首先我们先简单来回顾一下同步API和异步API的概念 1.同步API:只有当前的API执行完成之前,才会执行下一个API 例: ...

  4. 终于,帮开发写了一个bug

    写在文章的开头 最近项目比较紧,尤其前端的的需求比较多,作为一名测试,也会些vue,本着加快项目进度的美好想法,就自告奋勇的向组长承接了一部分开发的任务,其中有个需求需要在我们的广告管理后台新增一个上 ...

  5. RN概述

    一.RN概述 中文网:http://reactnative.cn/ ReactNative:使用JS语法编写移动APP应用,RN会把JS转换为底层Java或OC, 最终运行于手机-------完全不依 ...

  6. 4.4 Go goto continue break

    4.4 Go goto continue break Go语言的goto语句可以无条件的跳转到指定的代码行执行. goto语句一般与条件语句结合,实现条件转义,跳出循环体等. Go程序不推荐使用got ...

  7. k8s搭建实操记录一(master)

    #1)关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewalld swapoff  -a     ##虚拟机要关闭交换 ...

  8. jquery VS Dom(小实例单选-多选-反选)

    一直以来大家对jquery评价莫过于六个字 “吃得少,干的多” ,应用实例让大家看看这款牛到爆的插件能帮我们做什么,话不多说,直接加码 <!DOCTYPE html> <html l ...

  9. 用STM32的UART实现DMX512

    写在最前面: DMX512(digital multiplex) 其实就是主机向从机整包单向广播发送的协议(protocol),从机自取所需. 一.链接拓扑(network topology) 根据后 ...

  10. UILabel折行问题 从文件输入文本

    当内存的字符串对象中有\n时,该字符串会在UILabel展示时进行折行. 如果字符串是从plist中拿到的 1,字符串在plist中输入时打入过回车(即字符串在plist中展示也是折行的),那么字符串 ...