返回顶部
首页 > 资讯 > 数据库 >Redis为什么会出现阻塞
  • 619
分享到

Redis为什么会出现阻塞

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

Redis为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。发现阻塞线上应用服务最先感知到,可在应用方加入异常统计并通过邮件、短信、微信

Redis为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

发现阻塞

线上应用服务最先感知到,可在应用方加入异常统计并通过邮件、短信、微信报警。

借助日志系统,统计异常和触发报警逻辑

借助Redis监控系统发现阻塞问题,触发报警。推荐CacheCloud系统。

内在原因

api数据结构使用不合理

对于高并发场景,避免在大对象上执行算法复杂度超过O(n)O(n)的命令。

发现慢查询:slowlog get {n}

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

CPU饱和

CPU饱和指redis把单核CPU跑到100%。

top命令查看redis进程CPU使用率

redis-cli -h{ip} -p{port} –stat获取当前redis使用情况,判断并发是否达到极限

info commandstats 分析命令不合理开销时间,可能过度内存优化

持久化阻塞

1、fork阻塞

发生在RDB或AOF重写时,redis主线程调用fork产生子进程完成持久化文件重写

使用info stats命令获取lastest_fork_usec指标,表示redis最近一次fork操作耗时

2、AOF刷盘阻塞

开启AOF,文件刷盘一般每秒一次,硬盘压力过大时,fsync需要等待写入完成

查看redis日志或info persistence统计中的aof_delayed_fsync指标

可使用iotop差可能哪个进程消耗过多的硬盘资源

3、HugePage写操作阻塞

对于开启Transparent HugePages的操作系统,每次写命令引起的复制内存页单位由4KB变为2MB

会拖慢写操作的执行时间,导致大量写操作慢查询

外在原因

CPU竞争

1、进程竞争:redis是典型的CPU密集型应用。使用top、sar命令定位CPU消耗的时间点和进程

2、绑定CPU:常见优化是把redis进程绑定到CPU上,较低CPU上下文切换开销,如果fork子进程做了CPU绑定,则父子进程存在激烈的CPU竞争,极大影响redis稳定性。

内存交换

如果操作系统把redis使用的内存换出到硬盘上,会导致发生交换后的redis性能急剧下降。

识别redis内存交换的检查方法:

1、查询redis进程号

redis-cli info server | grep process_id

2、根据进程号查询内存交换信息

cat /proc/{process_id}/smaps | grep Swap

如果交换量都是0KB或者个别4KB,是正常现象。

预防内存交换:

1、保证机器充足的可用内存

2、确保所有redis示例设置最大可用内存(maxmemory),防止极端情况下redis内存不可控的增长

3、降低系统使用swap优先级,如 echo 10>/proc/sys/vm/swappiness

网络问题

1、连接拒绝

网络闪断:一般在网络割接或带宽耗尽的情况

redis连接拒绝:

连接数大于maxclients时拒绝新的连接进入,info stats的rejected_connections指标

客户端访问redis尽量采用NIO长连接或连接池的方式

redis用于大量分布式节点访问且生命周期较短的场景(如Map/Reduce)时,建议设置tcp-keepalive和timeout参数让redis主动检查和关闭无效连接

连接溢出:

进程限制:进程可打开最大文件数控制,ulimit -n,通常1024,大量连接的redis需要增大该值

backlog队列溢出:系统对于特定端口tcp连接使用backlog队列保存,redis默认511,系统backlog默认128,线上可使用cron定时执行netstat -s | grep overflowed统计

2、网络延迟

测量机器之间网络延迟

redis-cli -h{ip} -p{port} –latency
redis-cli -h{ip} -p{port} –latency-history 默认15秒完成一行统计,-i控制采样时间
redis-cli -h{ip} -p{port} –latency-dist 统计图展示,每1秒采样一次

3、网卡软中断

单个网卡队列只能使用一个CPU,高并发下网卡数据交互都集中在同一个CPU,导致无法充分利用多核CPU的情况。

一般出现在网络高流量吞吐的场景

关于Redis出现阻塞的原因就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。章!

您可能感兴趣的文档:

--结束END--

本文标题: Redis为什么会出现阻塞

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

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

猜你喜欢
  • Redis为什么会出现阻塞
    Redis为什么会出现阻塞?可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。发现阻塞线上应用服务最先感知到,可在应用方加入异常统计并通过邮件、短信、微信...
    99+
    2024-04-02
  • redis订阅为什么阻塞
    redis订阅阻塞的原因: redis采用单线程处理请求。 reactor模型是同步IO,需要等待命令执行完成,才会返回结果,进入下一次执行过程。 一旦某个客户端的某个命令执行时间很长,就会阻塞其他客户端。...
    99+
    2024-04-02
  • Redis的快照为什么不会阻塞其他请求
    今天就跟大家聊聊有关Redis的快照为什么不会阻塞其他请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。为什么这么设计(Why's THE ...
    99+
    2024-04-02
  • redis为什么会出现异常
    这篇文章主要介绍了redis为什么会出现异常,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Exception in th...
    99+
    2024-04-02
  • Golang channel为什么不会阻塞的原因详解
    正文 最近在学通道channel,发现一个简单的demo: package main import "fmt" func main() { chanInt := make(c...
    99+
    2024-04-02
  • 什么是异步非阻塞redis
    异步非阻塞redis又叫异步IO,在IO多路复用模型中,事件循环将文件句柄的状态事件通知给用户线程,由用户线程自行读取数据、处理数据。而在异步IO模型中,当用户线程收到通知时,数据已被内核读取并存储于用户线程指定的缓冲区内,内核在IO完成后...
    99+
    2024-04-02
  • golang携程会阻塞么
    golang携程本身不会发生阻塞,但如果不正确地使用,就会会发生阻塞。常见发生阻塞的原因:1、未正确处理通道阻塞,一个携程往一个已满的通道发送数据,或者从一个空的通道接收数据,会被阻塞,直到通道可用或有数据发送到通道;2、死锁,当多个携程相...
    99+
    2023-08-02
  • 什么是阻塞
    本篇内容主要讲解“什么是阻塞”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“什么是阻塞”吧!1. 中断就是从中断掉不是让太监来帮你干活的,他没有那个能力。太监是用...
    99+
    2024-04-02
  • Redis bigkeys命令会阻塞问题如何解决
    这篇文章主要介绍“Redis bigkeys命令会阻塞问题如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Redis bigkeys命令会阻塞问题如何解决”文章能帮助大家解...
    99+
    2023-07-05
  • 为什么会造成香港高防服务器带宽阻塞
    造成香港高防服务器带宽阻塞的原因:1. 网站服务器遭到DDoS入侵导致带宽占用。2. 网站访问流量从而过大导致带宽阻塞。具体内容如下:一、网站遭到入侵网站遭到DDoS入侵,DDoS入侵是一种资源占用性入侵,它不但会对服务器资源形成入侵,乃至...
    99+
    2024-04-02
  • linux阻塞与非阻塞的概念是什么
    在Linux系统中,阻塞和非阻塞是指对于输入/输出(I/O)操作的处理方式。阻塞(Blocking)是指当程序发起一个I/O操作时,...
    99+
    2023-09-16
    linux
  • 怎么在java中实现阻塞和非阻塞
    这篇文章给大家介绍怎么在java中实现阻塞和非阻塞,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序。1.概...
    99+
    2023-06-14
  • MySQL insert会阻塞update怎么解决
    这篇文章主要介绍“MySQL insert会阻塞update怎么解决”,在日常操作中,相信很多人在MySQL insert会阻塞update怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2023-07-05
  • Linux怎么实现设备阻塞/非阻塞读写
    本篇内容介绍了“Linux怎么实现设备阻塞/非阻塞读写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!设备阻塞IO的实现当我们读写设备文件的I...
    99+
    2023-06-16
  • 基于Redis如何实现阻塞队列
    这篇文章主要介绍“基于Redis如何实现阻塞队列”,在日常操作中,相信很多人在基于Redis如何实现阻塞队列问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Redis如何实现阻塞队列”的疑惑有所帮助!接下来...
    99+
    2023-06-22
  • php程序阻塞与非阻塞的区别是什么
    本文操作环境:Windows10系统、PHP7.1版、Dell G3电脑。php程序阻塞与非阻塞的区别是什么阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结...
    99+
    2017-08-28
    php
  • socket怎么设置为非阻塞
    要将一个socket设置为非阻塞模式,可以使用以下步骤:1. 创建socket对象。```pythonimport socketso...
    99+
    2023-10-09
    socket
  • Python中的同步异步阻塞与非阻塞是什么
    今天小编给大家分享一下Python中的同步异步阻塞与非阻塞是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、状态介绍在...
    99+
    2023-07-05
  • 基于Redis实现阻塞队列的方式
    日常需求开发过程中,不免会遇到需要通过代码进行异步处理的情况,比如批量发送邮件,批量发送短信,数据导入,为了减少用户的等待,不希望一直菊花转啊转,因此需要进行异步处理,做法就是讲要处...
    99+
    2024-04-02
  • 为什么会出现 ClassCastException 异常
    ClassCastException 异常是指在一个对象向下转型时发生的异常。出现该异常的原因可能有以下几种:1. 对象的类型与转型...
    99+
    2023-08-18
    异常
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作