redis阻塞原因以及处理方案
来源:https://blog.csdn.net/francis123580/article/details/82500700
Redis是单线程架构,在高并发的场景下,如果出现阻塞,会有严重后果,以下就是对阻塞问题的分析排查和解决
内在原因
API 或 数据结构 使用不合理
排查:
- 发现慢查询:执行
slowlog get {n}
- 发现大对象:执行
redis-cli -h {ip} -p {port} --bigkeys
解决:
- 解决慢查询:调整命令为低算法度命令
- 调整大对象:把大对象拆分为多个小对象,防止一次命令操作过多数据
CPU饱和
排查
- 查看CPU使用率:执行
top
命令 - 查询Redis并发量:执行
redis-cli -h {ip} -p {port} --stat
命令
解决:
- 集群化水平拓展分摊OPS压力
- 检查是否有过度的内存优化
持久化阻塞
排查
- 检查最近fork操作耗时:执行
info status
获取到 latest_fork_usec 指标 - 检查AOF刷盘最近成功时间:查看日志
解决:
- 若fork操作耗时超过1秒,避免使用过大的内存实例和规避fork缓慢的操作系统
- 若AOF刷盘fsync成功操作超过2秒,降低其他进程对硬盘的压力
外在原因
CPU竞争
排查:执行 top
或 sar
命令
解决:
- 不建议和其他多核CPU密集型服务部署在一起,会影响Redis吞吐量
- 把Redis进程绑定到CPU上,可降低CPU上下文切换开销
- 开启了持久化或参与复制的主节点不建议绑定CPU,因为子进程会占用90%竞争
内存交换
排查:
- 查询Redis进程号:执行
redis-cli -p 6383 info server | grep process_id
命令 - 根据进程号查询内存交换信息:执行
cat /proc/process_id/smaps | grep Swap
解决:
- 保证机器充足的可用内存
- 确保所有Redis实例设置最大可用内存,防止Redis不可控增长
- 降低系统使用swap优先级
网络问题
排查:
- 网络闪断:通过
sar -n DEV
查看本机历史流量是否正常 - Redis连接拒绝:执行
redis-cli -p 6384 info stats | grep rejected_connections
查看所有被拒绝的连接数量 - 连接溢出:执行
ulimit -n
命令,检查操作系统对进程使用资源的限制;执行netstat -s | grep overflowed
命令,检查是否有持续增长的连接拒绝 - 网络延迟:执行
redis-cli -h {host} -p {port} --latency
命令,测量机器之间的网络延迟
解决:
- 避免客户端与Redis之间异地跨机房调用
- 客户端访问Redis时尽量采用NIO长连接或者连接池的方式
- 对于支撑大量连接的Redis需要增大 ulimit 值,修改系统backlog值
- 调整网络拓扑结构,同物理机>同机架>跨机架>同机房>同城机房>异地机房
redis阻塞原因以及处理方案的更多相关文章
- Redis深入学习笔记(五)Redis阻塞原因
在实际使用Redis中,有时会碰到客户端timeout异常,或者没有可用连接异常等等异常,总结大概有如下原因: 内部阻塞原因: 1)大对象存取. 2)Fork阻塞. 3)Aof刷盘阻塞(距离上次刷盘大 ...
- redis 阻塞原因
1.内因: A.api或数据结构使用不合理: 如:对一个包含上万元素的hash结构执行hgetall操作,数据量大且命令复杂度O(n),必然阻塞 B.慢查询:前面有介绍 C.大对象: 执行./redi ...
- 7.Redis主线程阻塞原因
7.Redis主线程阻塞原因7.1 发现阻塞7.2 内在原因7.2.1 API或数据结构使用不合理7.2.2 CPU饱和7.2.3 持久化阻塞7.3 外在原因7.3.1 CPU竞争7.3.2 内存交换 ...
- Redis学习五(Redis 阻塞的原因及其排查方向).
一.慢查询 因为 Redis 是单线程的,大量的慢查询可能会导致 redis-server 阻塞,可以通过 slowlog get n 获取慢日志,查看详情情况. 二.bigkey 大对象 bigke ...
- redis集群主流架构方案分析
Redis在互联网大数据平台有着广泛的应用,主要被用来缓存热点数据,避免海量请求压垮数据库,同时可以提升服务节点的响应速度和并发量.随着数据量的增多,由于redis是占用单台物理机或虚机的内存,内存资 ...
- Redis高可用集群方案——哨兵
本篇文章版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文系列地址http://www.cnblogs.com/tdws/tag/NoSql/ 本人之前有篇文章,讲到了redis主从复制,读写分 ...
- 【Javascript】解决Ajax轮询造成的线程阻塞问题(过渡方案)
一.背景 开发Web平台时,经常会需要定时向服务器轮询获取数据状态,并且通常不仅只开一个轮询,而是根据业务需要会产生数个轮询.这种情况下,性能低下的Ajax长轮询已经不能满足需求,频繁的访问还会造成线 ...
- 需要我们了解的SQL Server阻塞原因与解决方法
需要我们了解的SQL Server阻塞原因与解决方法 上篇说SQL Server应用模式之OLTP系统性能分析.五种角度分析sql性能问题.本章依然是SQL性能 五种角度其一“阻塞与死锁” 这里通过连 ...
- Redis Cluster集群主从方案
本文介绍一种通过Jedis和Cluster实现Redis集群(主从)的高可用方案,该方案需要使用Jedis2.8.0(推荐),Redis3.0及以上版本(强制). 附:Redis Cluster集群主 ...
随机推荐
- 有关fgets和fcntl的讨论-待整理更新
问题引出 一个client程序:select 超时监听 sockfd套接字 和 STDIN_FILENO标准输入:若sockfd可读则接收server报文:若标准输入可读(按下回车),则开始用fget ...
- Windows 10正式版官方原版镜像!(备忘)
本文搜集整理微软官方发布的Windows 10正式版镜像下载链接,从RTM原始正式版开始,按照时间倒序排列,即越往上的越新. 注意:以下资源均来自于微软官方原版,ed2k可视为P2P下载链接.下载完成 ...
- Redis()- 布隆过滤器
一.布隆过滤器 布隆过滤器:一种数据结构.由二进制数组(很长的二进制向量)组成的.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识 ...
- spark算子优化
一.在聚合前在map端先预聚合 使用reduceByKey/aggregateByKey代替groupByKey 二.一次处理一个分区的数据,不过要注意一个分区里的数据不要太大,不然会报oom * 使 ...
- xtrabackup(innobackupex)使用详解
innobackupex实际上是percona-xtrabackup的perl整合脚本,功能当然更强大一些. xtrabackup备份实际上是在线的物理热备,为什么和么说呢,因为实际上他是以拷贝mys ...
- 《MySQL面试小抄》索引考点一面总结
<MySQL面试小抄>索引考点一面总结 我是肥哥,一名不专业的面试官! 我是囧囧,一名积极找工作的小菜鸟 囧囧表示:面试最怕的就是面试官问的知识点太笼统,自己无法快速定位到关键问题点!!! ...
- java中的Class.forName的作用
Class.forName有什么作用 Class.forName(xxx.xx.xx) 返回的是一个类 首先你要明白在java里面任何class都要装载在虚拟机上才能运行.这句话就是装载类用的(和ne ...
- C# MVC(File)控件多张图片上传加预览
刚来公司实习,老板叫我写一个积分商城网站.用的是公司的框架结构搭建的后台,所以后台的图片上传不需要自己写.但是前台的评价图片就需要自己手写了,在网上找了很多代码发现都用不了.问了很多人也都没有实现! ...
- GPU上如何优化卷积
GPU上如何优化卷积 本文将演示如何在TVM中编写高性能卷积实现.我们以平方大小的输入张量和滤波器为例,假设卷积的输入是大批量的.在本例中,使用不同的布局来存储数据,以实现更好的数据局部性.缓冲区布局 ...
- 开发平台支持Arm Cortex-M的微控制器上人工智能训练
开发平台支持Arm Cortex-M的微控制器上人工智能训练 Development platform enables AI training on Arm Cortex-M-based microc ...