第4章 客户端-客户端案例分析

news2024/11/26 4:53:32

1 Redis内存陡增
1.1.现象
服务端现象:Redis主节点内存陡增,几乎用满maxmemory,而从节点内存并没有变化(正常情况下主从节点内存使用量基本相同)。
客户端现象:客户端产生了OOM异常,也就是Redis主节点使用的内存已经超过了maxmemory的设置,无法写入新的数据:

redis.clients.jedis.exceptions.JedisDataException: OOM command not allowed when used memory > 'maxmemory'

1.2.分析原因
从现象看,可能的原因有两个。
1)确实有大量写入,但是主从复制出现问题:查询了Redis复制的相关信息,复制是正常的,主从数据基本一致。
主节点的键个数:

127.0.0.1:6379> dbsize
(integer) 2126870

从节点的键个数:

127.0.0.1:6380> dbsize
(integer) 2126870

2)其他原因造成主节点内存使用过大:排查是否由客户端缓冲区造成
主节点内存陡增,使用info clients命令查询相关信息如下:

127.0.0.1:6379> info clients
# Clients
connected_clients:1891
client_longest_output_list:225698
client_biggest_input_buf:0
blocked_clients:0

很明显输出缓冲区不太正常,最大的客户端输出缓冲区队列已经超过了20万个对象,于是需要通过client list命令找到omem不正常的连接,一般来说大部分客户端的omem为0(因为处理速度会足够快),于是执行如下代码,找到omem非零的客户端连接:

redis-cli client list | grep -v "omem=0"

找到了如下一条记录:

id=7 addr=10.10.xx.78:56358 fd=6 name= age=91 idle=0 flags=O db=0 sub=0 psub=0
multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=224869 omem=2129300608 events=rw cmd=monitor

已经很明显是因为有客户端在执行monitor命令造成的。
1.3.处理方法和后期处理
对这个问题处理的方法相对简单,只要使用client kill命令杀掉这个连接,让其他客户端恢复正常写数据即可。但是更为重要的是在日后如何及时发现和避免这种问题的发生,基本有三点:

  • 从运维层面禁止monitor命令,例如使用rename-command命令重置monitor命令为一个随机字符串,除此之外,如果monitor没有做rename-command,也可以对monitor命令进行相应的监控(例如client list)。
  • 从开发层面进行培训,禁止在生产环境中使用monitor命令,因为有时候monitor命令在测试的时候还是比较有用的,完全禁止也不太现实。
  • 限制输出缓冲区的大小。
  • 使用专业的Redis运维工具,例如13章会介绍CacheCloud,上述问题在Cachecloud中会收到相应的报警,快速发现和定位问题。
    2.客户端周期性的超时
    2.1.现象
    客户端现象:客户端出现大量超时,经过分析发现超时是周期性出现的,这为问题的查找提供了重要依据:
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out

服务端现象:服务端并没有明显的异常,只是有一些慢查询操作。
2.2.分析

  • 网络原因:服务端和客户端之间的网络出现周期性问题,经过观察网络是正常的。
  • Redis本身:经过观察Redis日志统计,并没有发现异常。
  • 客户端:由于是周期性出现问题,就和慢查询日志的历史记录对应了一下时间,发现只要慢查询出现,客户端就会产生大量连接超时,两个时间点基本一致(如表4-6和图4-14所示)。
    在这里插入图片描述
    在这里插入图片描述
    最终找到问题是慢查询操作造成的,通过执行hlen发现有200万个元素,这种操作必然会造成Redis阻塞,通过与应用方沟通了解到他们有个定时任务,每5分钟执行一次hgetall操作。
127.0.0.1:6399> hlen user_fan_hset_sort
(integer) 2883279

以上问题之所以能够快速定位,得益于使用客户端监控工具把一些统计数据收集上来,这样能更加直观地发现问题,如果Redis是黑盒运行,相信很难快速找到这个问题。处理线上问题的速度非常重要。
2.3.处理方法和后期处理
这个问题处理方法相对简单,只需要业务方及时处理自己的慢查询即可,但是更为重要的是在日后如何及时发现和避免这种问题的发生,基本有三点:

  • 从运维层面,监控慢查询,一旦超过阀值,就发出报警。
  • 从开发层面,加强对于Redis的理解,避免不正确的使用方式。
  • 使用专业的Redis运维工具,例如13章会介绍CacheCloud,上述问题在CacheCloud中会收到相应的报警,快速发现和定位问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

擎耀解码汽车大灯照明系统电动调节步进电机位置反馈的解决方案

在现代汽车设计中,智能照明系统扮演着至关重要的角色。其中,汽车大灯的电动调节功能不仅提高了夜间行车的安全性,还增强了车辆的科技感和便利性。然而,要实现精准的大灯角度调节,步进电机的位置反馈机制尤为关键。擎耀…

Java学习 - Redis-Cluster

为什么需要集群 为了高的处理速度 单机redis,官网宣传处理速度为10万命令/秒如果业务需要更高的处理速度,则需要使用集群 为了存储大量数据 一般机器的内存为16-256G如果想要存储更大量的数据,则需要使用集群 分布式之数据分区 因为数据需…

不要小看3D元素,融入大屏后,立马带来5个提升。

将3D元素引入可视化大屏可以带来多方面的好处,包括但不限于以下几点: 1. 更生动的展示效果: 通过引入3D元素,可视化大屏可以呈现更加生动、立体的展示效果,使得数据和信息更加直观、形象化,吸引观众的注意…

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展,冷库成为储存食材、保证食品质量的重要场所。 然而,由于冷库环境的特殊性,如密封性强、温度低、湿度大等,一旦冷库内发生可燃气体泄露,后果将不堪设想。因此,在餐饮冷库中安装并合理…

解决RuntimeError: Unsupported image type, must be 8bit gray or RGB image.

今天在使用Opencv进行人脸识别项目时发现了一个问题,一直报这个错误RuntimeError: Unsupported image type, must be 8bit gray or RGB image.查了一下资料也是解决了,这样给大家分享一下 解决方案 Numpy 有一个主要版本更新,与 dlib 不兼容。…

Kubernetes实现应用零宕机

Kubernetes实现应用零宕机 容器镜像位置Pod数量(应用程序实例)Pod中断预算部署策略自动回滚部署Probe探针初始启动时间延迟优雅终止期GrancePeriodSecondsPod反亲和力资源自动缩放Autoscaling总结 容器已经彻底改变了应用托管格局!它带来了许多需要复杂设置的设施。…

嵌入式Linux系统编程 — 4.2 sizeof 和 strlen 的作用和区别

目录 1 strlen函数 2 sizeof函数 3 sizeof 和 strlen 的作用和区别(面试必问) 3.1 作用 3.2 主要区别 1 strlen函数 strlen() 函数是 C 语言标准库中的一个函数,用于计算字符串的长度。它不包括字符串末尾的空字符(\0&#…

原、反、补码之间的相互转换以及计算机硬件实现有符号数、无符号数、定点小数、定点整数的加减法运算

目录 原、反、补码之间的相互转换 无符号整数的加减运算 无符号整数的加法运算 无符号整数的减法运算 有符号整数的加减运算 有符号整数补码的加法运算 有符号整数补码的减法运算 定点小数的加减运算 定点小数补码的加法运算 定点小数补码的减法运算 定点小数VS定点整…

CSS|05 继承性与优先级

继承性 一、继承性的特点: 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时,外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承? 答:并不是所有样式能被继承…

1991java Web体检预约管理系统eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP体检预约管理系统是一套完善的web设计系统,对理解JSP java 编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数据库为Mysql5.0,使用…

Unity3D Text使用超链接跳转事件

系列文章目录 Unity工具 文章目录 系列文章目录👉前言👉一、第一种使用TextMeshPro加入超链接👉二、继承Text组件,重载OnPopulateMesh方法👉三.壁纸分享👉总结 👉前言 有时候会用到跳转的问题,所以添加一…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式,可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式,这只会影响…

【UE开发】游戏库存UI系统Demo

1.项目介绍 1.描述:一种用于存储记录玩家物品的游戏内可视化操作系统。 2.演示:https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大纲: 4.样式: 2.W_Inventory_Main_01(…

云效BizDevOps上手亲测

云效BizDevOps上手亲测 什么是云效项目协作Projex配置2023业务空间原始诉求字段原始诉求工作流创建原始诉求配置2023产品空间创建主题业务原始诉求关联主题配置2023研发空间新建需求需求关联主题 与传统区别云效开发流程传统开发流程云效BizDevOps 操作体验 什么是云效 在说到…

java+mysql图书管理系统

完整代码地址 1.运行效果图 2.主要代码 2.1.连接数据库 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

安装containerd

containerd文档地址 containerd介绍 早在2016年3月,Docker 1.11的Docker Engine里就包合了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来, 为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器…

使用FRP 0.58版本进行内网穿透的详细教程

什么是FRP? FRP(Fast Reverse Proxy)是一款高性能的反向代理应用,主要用于内网穿透。通过FRP,您可以将内网服务暴露给外网用户,无需进行复杂的网络配置。 准备工作 服务器:一台具备公网IP的服…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

谷歌发布两款新Gemma 2大语言模型;阿里云开源Qwen2-72B模型荣登榜首

🦉 AI新闻 🚀 谷歌发布两款新Gemma 2大语言模型 摘要:谷歌发布Gemma 2大语言模型,包括90亿和270亿参数两种版本。Gemma 2在推理性能、效率和安全性上较第一代有显著提升。27B模型的性能媲美更大规模的主流模型,且部署…

提升自来水公司经济效益的策略研究

现阶段,如何提高自来水公司经济效益的问题已经得到社会的广泛关注。文章将立足于成本管理的角度,在对自来水公司生产现状分析的基础上,总结影响自来水公司经济效益的相关因素,最后从成本管理的角度出发,对如何提高自来…