redis阻塞分析
admin
2023-02-07 11:20:03
0

         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进行排查。

                  

          

                    

       



相关内容

热门资讯

工业和信息化部:依托标准牵引智... 日前,在北京举办的《人工智能 智能体互联》系列标准应用推进专题会上,工业和信息化部科技司副司长甘小斌...
原创 强... 进入下半年,子系品牌新一轮旗舰和中端性能机开始密集预热,近期更是有博主连续放出两条关键信息,分别指向...
“文学超界面”探索数字时代人文... 来源:新华网 当严肃文学的深厚内核遇见人工智能生成内容(AIGC)的影像创造力,会碰撞出怎样的火花...
以防长称已为应对伊朗局势做好“... △以色列国防部长卡茨(资料图)当地时间23日,据以色列方面消息,以色列国防部长卡茨当天表示,鉴于当前...
美参议院否决限制特朗普对伊战争... △美国国会(资料图)当地时间23日,美国参议院以49票对47票的表决结果,否决了旨在限制特朗普对伊朗...
工信部部长:搞“脱钩断链”对谁... 7月23日,2026年亚太经合组织(APEC)数字和人工智能部长会议新闻发布会在成都召开。会议主席、...
AMD展示最强AI加速器MI4... IT之家 7 月 24 日消息,今天(7 月 24 日)在美国旧金山召开的年度盛会 Advancin...
河北:知行研学度盛夏 多彩实践... 冀时新闻报道暑假期间,我省各地推出形式多样的青少年研学活动,让孩子们在实践中增长见识、锤炼品格,度过...
世界互联网大会数智健康工作组以... 7月22日,2026年世界互联网大会数字丝路发展论坛在陕西西安开幕。这是世界互联网大会连续第三年举办...
开立医疗获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示开立医疗(300633)新获得一项实用新型专利授权,专利名为“...