搜索
首页数据库RedisRedis阻塞原因详解

Redis阻塞原因详解

Nov 29, 2019 pm 03:56 PM
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知识请关注redis入门教程栏目。

以上是Redis阻塞原因详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:CSDN。如有侵权,请联系admin@php.cn删除
REDIS:它如何充当数据存储和服务REDIS:它如何充当数据存储和服务Apr 24, 2025 am 12:08 AM

REDISACTSASBOTHADATASTOREANDASERVICE.1)ASADATASTORE,ITUSESIN-MEMORYSTOOGATOFORFOFFASTESITION,支持VariousDatharptructuresLikeKey-valuepairsandsortedsetsetsetsetsetsetsets.2)asaservice,ItprovidespunctionslikeItionitionslikepunikeLikePublikePublikePlikePlikePlikeAndluikeAndluAascriptingiationsmpleplepleclexplectiations

REDIS与其他数据库:比较分析REDIS与其他数据库:比较分析Apr 23, 2025 am 12:16 AM

Redis与其他数据库相比,具有以下独特优势:1)速度极快,读写操作通常在微秒级别;2)支持丰富的数据结构和操作;3)灵活的使用场景,如缓存、计数器和发布订阅。选择Redis还是其他数据库需根据具体需求和场景,Redis在高性能、低延迟应用中表现出色。

REDIS的角色:探索数据存储和管理功能REDIS的角色:探索数据存储和管理功能Apr 22, 2025 am 12:10 AM

Redis在数据存储和管理中扮演着关键角色,通过其多种数据结构和持久化机制成为现代应用的核心。1)Redis支持字符串、列表、集合、有序集合和哈希表等数据结构,适用于缓存和复杂业务逻辑。2)通过RDB和AOF两种持久化方式,Redis确保数据的可靠存储和快速恢复。

REDIS:了解NOSQL概念REDIS:了解NOSQL概念Apr 21, 2025 am 12:04 AM

Redis是一种NoSQL数据库,适用于大规模数据的高效存储和访问。1.Redis是开源的内存数据结构存储系统,支持多种数据结构。2.它提供极快的读写速度,适合缓存、会话管理等。3.Redis支持持久化,通过RDB和AOF方式确保数据安全。4.使用示例包括基本的键值对操作和高级的集合去重功能。5.常见错误包括连接问题、数据类型不匹配和内存溢出,需注意调试。6.性能优化建议包括选择合适的数据结构和设置内存淘汰策略。

REDIS:现实世界的用例和示例REDIS:现实世界的用例和示例Apr 20, 2025 am 12:06 AM

Redis在现实世界中的应用包括:1.作为缓存系统加速数据库查询,2.存储Web应用的会话数据,3.实现实时排行榜,4.作为消息队列简化消息传递。Redis的多功能性和高性能使其在这些场景中大放异彩。

REDIS:探索其功能和功能REDIS:探索其功能和功能Apr 19, 2025 am 12:04 AM

Redis脱颖而出是因为其高速、多功能性和丰富的数据结构。1)Redis支持字符串、列表、集合、散列和有序集合等数据结构。2)它通过内存存储数据,支持RDB和AOF持久化。3)从Redis6.0开始引入多线程处理I/O操作,提升了高并发场景下的性能。

Redis是SQL还是NOSQL数据库?答案解释了Redis是SQL还是NOSQL数据库?答案解释了Apr 18, 2025 am 12:11 AM

RedisisclassifiedasaNoSQLdatabasebecauseitusesakey-valuedatamodelinsteadofthetraditionalrelationaldatabasemodel.Itoffersspeedandflexibility,makingitidealforreal-timeapplicationsandcaching,butitmaynotbesuitableforscenariosrequiringstrictdataintegrityo

REDIS:提高应用程序性能和可扩展性REDIS:提高应用程序性能和可扩展性Apr 17, 2025 am 12:16 AM

Redis通过缓存数据、实现分布式锁和数据持久化来提升应用性能和可扩展性。1)缓存数据:使用Redis缓存频繁访问的数据,提高数据访问速度。2)分布式锁:利用Redis实现分布式锁,确保在分布式环境中操作的安全性。3)数据持久化:通过RDB和AOF机制保证数据安全性,防止数据丢失。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境