个人博客网: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. shell命令之巧用cut

    需求:取出日志中ip字段,并进行统计排序 .一般用用awk命令 假如ip地址为第一个字段 那么 awk ‘{print $1}’ 文件名 |sort |uniq -c|sort-nr 那如果不是第一个 ...

  2. window下用notepad++编辑了脚本文件然后放在linux报错显示无法运行

    首先vi :set ff 查看文件类型 接着 下载dos2unix  root用户下yum -y install dos2unix 然后 dos2unix 文件.sh 转换格式  接着在正常启动即可

  3. # C#学习笔记(一)——准备工作

    C#学习笔记(一)--准备工作 目录 C#学习笔记(一)--准备工作 1.1 下载安装.NET框架 1.2 创建源代码 1.3 一些基本名称 1.4 简单的命名建议 1.1 下载安装.NET框架 .N ...

  4. Redis实现分布式锁(设计模式应用实战)

    笔者看过网络上各种各样使用redis实现分布式锁的代码,要么错误,要么片段化,没有一个完整的例子,借这个周末给大家总结一下redis实现分布式锁的两种机制 自旋锁和排他锁 鉴于实现锁的方式不同,那么这 ...

  5. ABAP 内表与XML转换

    1需求说明 在系统交互中需要将SAP内表转换为XML文件,发送给其他系统,并且将其他系统返回的XML文件转换为SAP内表. 2创建转换编辑器 事务代码:STRANS 选择简单转换 以图形方式编辑 右键 ...

  6. 老板:kill -9 的原理都不知道就敢去线上执行?明天不用来了!

    GitHub 14.5k Star 的Java工程师成神之路,开放阅读了! 相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌握常用 ...

  7. PHP根据抖音的分享链接来抓包抖音视频

    现在抖音是个很火的短视频平台,上面有许多不错的小视频.今天教大家怎么用PHP技术来获取到抖音上的的内容. 1:打开抖音选中你认为好的视频点击分享,复制链接,然后你会获取到如下的内容: #科比 愿你去的 ...

  8. java 获取请求ip,服务本地ip

    /** * 获取请求IP * * @param request * @return */ public static String getRequestIpAddress(HttpServletReq ...

  9. ql的python学习之路-day14

    前言:本节主要学习时间模块time.datetime python中的几种时间表示:1)时间戳  2)格式化的字符串时间 3)struct_time元组格式的时间 time.datetime模块源码: ...

  10. Java基础之抽象类和接口

    今天来说说抽象类和接口的实现以及它们的区别.我们知道抽象类和接口都是对具体事物的抽象,接口在实现上比抽象类更加抽象,抽象类中可以有普通方法和变量,而接口中只有抽象方法和不可变常量.但是从另一个角度看, ...