返回顶部
首页 > 资讯 > 数据库 >redis阻塞分析
  • 588
分享到

redis阻塞分析

2024-04-02 19:04:59 588人浏览 独家记忆
摘要

         Redis是经典的单线程架构,所有的读写操作都是在一个主线程中完成的。当redis处于高并发情况时,如果出现

         Redis是经典的单线程架构,所有的读写操作都是在一个主线程中完成的。当redis处于高并发情况时,如果出现阻塞,哪怕是很短的时间,对于应用来说都相当严重,会出现大量的超时问题,应用出问题。

1.  redis的阻塞主要包括两方面:

   1.1 内在原因:不合理使用api数据结构、CPU饱和持久化阻塞

   1.2 外在原因:CPU竞争、内存交换、网络问题


     1.1内在原因:

          1.1.1:如何发现慢查询:slowlog get [N]  选型:N,可选,代表获取的日志条数

          1.1.2:如何发现大对象:redis-cli -h {ip} -p {port} --bigkeys

          1.1.3:CPU饱和问题:单线程Redis 处理命令时只能使用一个CPU,而CPU饱和是指Redis把单核CPU使用率跑到接近100%。CPU饱和导致Redis无法处理更多命令,严重影响吞吐和应用方的稳定。

     如何发现CPU饱和:redis-cli -h {ip} -p {port} --stat

          1.1.4:持久化相关阻塞:

                 a.fork阻塞: fork操作本身耗时过长,会导致主线程阻塞。
          通过info stats中的latest_fork_usec指标确定(单位为微秒),表示最近一次fork操作耗时,如果耗时很大,比如超过1秒,则需要做优化调整,比如不使用过大内存实例,或者规避fork缓慢的xen虚拟机

                b.AOF刷盘阻塞:当我们开启AOF持久化功能时,文件刷盘的方式一般采用每秒一次,后台线程每秒对AOF文件做fsync操作。当硬盘压力过大时,fsync操作需要等待,直到写入完成。如果主线程发现距离上一次的fsync成功超过2秒,为了数据安全性它会阻塞直到后台线程执行fsync操作完成。这种阻塞行为主要是硬盘压力引起。后台日志会出现如下信息:

Asynchronous AOF fsync is taking too long (disk is busy). Writing the AOFbuffer without waiting for fsync to complete, this may slow down Redis.

     1.2 外在原因:

          1.2.1:CPU竞争:redis是经典的CPU密集型应用,不建议和其它的程序一起使用。可以使用top命令都为问题;

          1.2.2:绑定CPU:优化把Redis绑定到CPU上,降低CPU频繁上下文切换。

                   注意:对于开启了持久化或参与复制的主节点不建议绑定CPU,防止父进程与子进程将产生激烈CPU竞争,影响Redis稳定性。

          1.2.3:内存交行:定位内存交换方法:

                   a.查询redis进程号:redis-cli -p 6384 info server |grep process_id

                   b.根据进程号查询内存交换信息:cat /proc/xxxx/smaps |grep Swap

                   c.如果交换都是0kb或者偶尔4kb属于正常现象

                   d. 降低系统使用swap优先级: 修改swappiness

          1.2.4:网络问题:

                   a. Redis连接拒绝:Redis通过maxclients参数控制客户端最大连接数,默认10000。查看info stats的rejected_connections统计指标展示被拒绝的数量。客户端访问尽量采用长连接或者连接池方    式。进程限制优化:设置ulimit -n 65535 防止 Too many Open files
                   b.backlog队列溢出:系统默认backlog为128,优化:使用echo 512>/proc/sys/net/core/somaxconn修改系统默认参数,如果怀疑是backlog队列溢出,队列溢出统计:

                      netstat-s|grepoverflowed,查看是否有持续增长的连接拒绝情况。

                   c.网络延时:网络延时统计:
                                   redis-cli -h {host} -p {port} --latency
                                  分别统计:最小值、最大值、平均值、采样次数
                                  网络延时一般发生在跨机房部署
                   d.网卡软中断:单个网卡队列只能使用一个CPU,高并发下网卡数据集中在一个CPU下,导致无法利用多核CPU。网卡软中断瓶颈一般出现在网络高流量吞吐场景,top的si指标过高。

                      使用top 命令,按下1进行排查。

                  

          

                    

       



您可能感兴趣的文档:

--结束END--

本文标题: redis阻塞分析

本文链接: https://lsjlt.com/news/44427.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • redis阻塞分析
             redis是经典的单线程架构,所有的读写操作都是在一个主线程中完成的。当redis处于高并发情况时,如果出现...
    99+
    2024-04-02
  • Redis阻塞
    可能存在问题 内在原因:API或数据结构使用不合理、CPU饱和、持久化阻塞等 外在原因:CPU竞争、内存交换、网络问题等 问题处理: API或数据结构使用不合理,可能存在慢查询或者大对象: 发现慢查询 slowlog get {n}...
    99+
    2018-02-05
    Redis阻塞
  • Nodejs中阻塞和非阻塞的示例分析
    这篇文章主要介绍了Nodejs中阻塞和非阻塞的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。对于阻塞和非阻塞这两个概念大家应该都有一些自己的理解:再简单说一下,阻塞大...
    99+
    2023-06-15
  • php五大io模型之阻塞与非阻塞的示例分析
    小编给大家分享一下php五大io模型之阻塞与非阻塞的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!php实现五大io模型-1阻塞与非阻塞阻塞:是指应用程序执行IO操作需要彻底完成后才返回到用户空间非阻塞:是指应用程...
    99+
    2023-06-15
  • Java网络编程之IO模型阻塞与非阻塞简要分析
    目录1.阻塞I/O模型2.非阻塞I/O模型1.阻塞I/O模型 阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为: 1.1在用户线程发出IO请求之后...
    99+
    2024-04-02
  • PHP协程与阻塞举例分析
    本篇内容介绍了“PHP协程与阻塞举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!进程、线程、协程关于进程、线程、协程,有非常详细和丰富...
    99+
    2023-06-17
  • redis订阅为什么阻塞
    redis订阅阻塞的原因: redis采用单线程处理请求。 reactor模型是同步IO,需要等待命令执行完成,才会返回结果,进入下一次执行过程。 一旦某个客户端的某个命令执行时间很长,就会阻塞其他客户端。...
    99+
    2024-04-02
  • 阻塞者及阻塞数量
    With T As ( Select ROW_NUMBER() over (order by spid) as id, spid,blocked From (select distinc...
    99+
    2024-04-02
  • 同步异步,阻塞非阻塞
    众所周知JavaScript的执行环境是单线程的,当有多任务时,先执行前面的任务再按顺序狮子那个后面一个,如果前面一个任务耗时很长,那么多所有任务都将拖延,比如经常遇到的浏览器无响应其实就是因为某一段JavaScript代码长时间运行(死循...
    99+
    2023-06-03
  • Redis为什么会出现阻塞
    Redis为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。发现阻塞线上应用服务最先感知到,可在应用方加入异常统计并通过邮件、短信、微信...
    99+
    2024-04-02
  • 什么是异步非阻塞redis
    异步非阻塞redis又叫异步IO,在IO多路复用模型中,事件循环将文件句柄的状态事件通知给用户线程,由用户线程自行读取数据、处理数据。而在异步IO模型中,当用户线程收到通知时,数据已被内核读取并存储于用户线程指定的缓冲区内,内核在IO完成后...
    99+
    2024-04-02
  • Redis阻塞的情况有哪些
    这篇文章主要介绍“Redis阻塞的情况有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis阻塞的情况有哪些”文章能帮助大家解决问题。命令阻塞使用不当的命令造成客户端阻塞:keys * :获...
    99+
    2023-07-05
  • Node.js中非阻塞 I/O的示例分析
    这篇文章主要介绍了Node.js中非阻塞 I/O的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 说到 ...
    99+
    2024-04-02
  • Node.js中的非阻塞I/O举例分析
    这篇文章主要介绍“Node.js中的非阻塞I/O举例分析”,在日常操作中,相信很多人在Node.js中的非阻塞I/O举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”No...
    99+
    2024-04-02
  • css加载造成阻塞的示例分析
    这篇文章主要为大家展示了“css加载造成阻塞的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css加载造成阻塞的示例分析”这篇文章吧。对css加载对DO...
    99+
    2024-04-02
  • 同步、异步与阻塞、非阻塞
    1. 同步与异步   同步和异步关注的是消息通信机制。同步就是在发出一个【调用】时,在没有拿到结果之前,该【调用】就不返回,但是一旦调用返回,就得到返回值了。   换句话说,就是由【调用者】主动等待这个【调用】的结果。     而异步正好...
    99+
    2023-01-31
  • 浅谈Redis阻塞的9种情况
    目录命令阻塞SAVE 阻塞同步持久化AOF 重写AOF 日志大 Key 问题查找大 key删除大 key清空数据库集群扩容前两天去美团面试的陈同学回来了,看他满脸泄气的样子,准是没拿到 Offer。 听了他面试的经过,真...
    99+
    2023-03-24
    Redis 阻塞
  • socket阻塞和非阻塞怎么设置
    在使用socket进行网络通信时,可以设置socket为阻塞或非阻塞模式。阻塞模式下,当执行socket的读取和写入操作时,如果没有...
    99+
    2023-09-16
    socket
  • 分析Java非阻塞算法Lock-Free的实现
    目录非阻塞的栈非阻塞的链表非阻塞的栈 我们先使用CAS来构建几个非阻塞的栈。栈是最简单的链式结构,其本质是一个链表,而链表的根节点就是栈顶。 我们先构建Node数据结构: pub...
    99+
    2024-04-02
  • Java 阻塞队列和线程池原理分析
    目录【1】阻塞队列一、什么是阻塞队列?二、阻塞队列有什么用?三、阻塞队列的简单实用【2】Java 线程池一、我们为什么需要Java 线程池?使用它的好处是什么?二、Java中主要提供...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作