redis: 记录一次线上redis内存占用过大问题解决过程

news2024/11/16 2:38:43

引言

记录一次线上redis占用过大的排查过程,供后续参考

问题背景

测试同事突然反馈测试环境的web系统无法登陆,同时发现其他子系统也存在各类使用问题

排查过程

1、因为首先反馈的是测试环境系统无法登陆,于是首先去查看了登陆功能的报错信息,一查看服务器日志首先发现了redis集群宕机的问题
在这里插入图片描述
同时也有其他的一些redis相关报错
在这里插入图片描述

2、由此可知,肯定是redis出现了问题,那么进一步排查redis节点情况

3、因为redis部署的是集群,首先到服务器上通过top指令查看了各个节点的内存、cpu占用情况

4、结果发现有两个节点的内存占用高达15G

5、单独登陆这两个节点,通过INFO指令查询节点详细状态

redis-cli -p <端口> 
INFO

在这里插入图片描述

6、结果发现这两个节点的内存占用确实异常,而且这两个节点是主从节点。那么问题到这里有基本清晰了,以下基本就是两个方向:

    1. 产生了大量的key,没有及时清理导致内存占用过多
    1. 某几个key其值异常大,没有及时清理导致内存占用过多

但这里其实偏向于第2点,因为是集群模式下某一主从节点都出现该问题,说明是某一个hash段的key分配到这个节点上的很大。

通过通过INFO指令查询到redis中占用的key数量只有1百多万,不算很多,所以基本也定位到是第2点的可能性了。

7、要查询是否有占用内存较大的key, 可以通过bigkeys指令。如下图所示,可以看到其中jms_log_list的key占用内存高达50%

redis-cli -p <服务端口> -a <认证密码> --bigkeys

在这里插入图片描述

再详细查询这个key的占用空间,单位bytes,换算下来将近10G

memory usage <key> 

在这里插入图片描述

8、到这里问题就基本明朗了,通过key值去查询代码,发现这个数据是list类型的,其作用就是作为一个临时队列。再去查看这个队列的消费者,发现这个服务没有正常消费

9、到服务器上查看消费者服务的状态,发现服务并没有运行。经调查为上周末测试服务器机房断电后,启动服务时把这个消费者服务漏了,经过几天的运行,数据累计到一定地步导致内存占用过大了。从而影响了整个redis集群的运行。

10、后续关掉了一个从节点,让主节点有足够的内存空间可以运行,同时把消费者服务启动起来了,为了加快消费,还临时增加了消费者的节点数,主节点消费完成后再将从节点启动起来,让从节点逐步同步主节点的数据

11、最终解决问题,由此引申出一个redis内存占用过大的问题排查思路,也提醒我们,完善测试环境的开机自启脚本,同时遇到此类问题,要结合服务器情况,耐心思考、解决问题。

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

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

相关文章

阿里微服务质量保障系列:故障演练

对于很多大型企业(如阿里巴巴)来说,经过多年的技术演进,系统工具和架构已经高度垂直化,服务器规模也达到了比较大的体量。当服务规模大于一定量(如10000台)时,小概率的硬件故障每天都会发生。这时如果需要人的干预,系统就无法可靠的伸缩。 为此每一层的系统都会面向失…

数据库SQL

数据库&SQL 数据库基本概念数据库DataBase定义 数据库管理系统(DBMS)定义在JAVA项目中与数据库的结合数据库管理系统中常见的概念库与表的关系 SQL数据类型数字类型浮点类型字符类型TEXT类型日期类型 SQL语言的分类DDL:数据定义语言修改表结构的注意事项 DML:数据操作语言D…

关于卷积神经网络的池化层(pooling)

了解池化层 池化层又称“下采样层”或“子采样层”&#xff0c;池化层可以大大降低特征的维度&#xff0c;减少计算量&#xff0c;同时可以避免过拟合问题。 顾名思义&#xff0c;最大池化层就是从输入的矩阵中某一范围内&#xff0c;选择最大的元素进行保留&#xff1b;平均池…

在MacBook上实现免费的PDF文件编辑

之前我想对PDF文件进行简单处理&#xff08;比如删页面、添空白页、调整页面顺序&#xff09;&#xff0c;要么是开wps会员【花钱贵】&#xff0c;下载&#xff08;盗版&#xff09;Adobe Acrobat【macOS不好下载】&#xff0c;要么用福昕阅览器登陆学生账号&#xff08;学校买…

运算符重载(operator)

语法&#xff1a; 返回值 operator 运算符 ( 参数 ) 例&#xff1a; Point operator(const Point &p1,const Point &p2); //输出 Point 类型的输出运算符重载函数 ostream & operator<<(ostream& out,Point &p) {cout << "输出运算符…

01. Python基础环境搭建

目录 1、什么是Python 2、Python的特点 3、基础环境搭建 3.1、下载安装解释器 3.2、hello world 4、集成开发环境&#xff1a;PyCharm 4.1、下载安装Pycharm 4.2、新建简单Demo 1、什么是Python Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Pytho…

Android EditText 实现强制性弹出只能输入英文的键盘

如果 EditText 控件不做任何特殊处理&#xff0c;例如笔者手机默认弹出的是百度输入法的软键盘&#xff0c;可实现中英文切换&#xff0c;并且自带英文单词智能联想功能&#xff08;与系统安装输入法和设置相关&#xff09;。但在某些应用场景下&#xff0c;例如在英语APP里练习…

在CSDN上挣点外快的小tips

作为一个在csdn上也挣了一点辛苦费的博主&#xff0c;个人简单总结了两个方法。 1、道德的方法 如上图&#xff0c;可以把自己曾经做过的一些设计或其它资源类的内容&#xff0c;打包传到CSDN的资源池中&#xff0c;有条件的可以写个文章引流一下&#xff0c;运气好的话会有人下…

Python基础入门(6)----Python控制流:if语句、for循环、while循环、循环控制语句

文章目录 Python控制流:if语句、for循环、while循环、循环控制语句if语句示例:for循环示例:while循环示例:循环控制语句示例:最佳实践Python控制流:if语句、for循环、while循环、循环控制语句 控制流是编程中的基础概念,它允许我们根据不同的条件执行不同的代码块,或者…

中西部地区教育正获优质均衡高质量发展

教育部日前消息&#xff0c;2022年我国基础教育财政性教育经费达3.2万亿元&#xff0c;比2015年增加了1.3万亿元&#xff0c;年均增长7.7%。近些年来&#xff0c;我国基础教育各学段财政总投入和生均支出逐年只增不减&#xff0c;为推动基础教育优质均衡发展提供了有力支撑。 …

antd 表单项联动验证时,disabled属性不生效

在antd表单中&#xff0c;表单项验证条件是根据其他表单项的值决定的&#xff0c;比如当前【时间限制】选择【无】时&#xff0c;【限制时段】表单项不可用 所以我单纯使用 disabled{sourceForm.getFieldValue().timeLimit}是不生效的&#xff0c;因为disabled切换会涉及到st…

怎么在相册里去水印?三种方法教你去除

当你查看相册时&#xff0c;有时可能会注意到一些照片上有水印&#xff0c;这可能会让人感到不满,不管你是想保存这些照片还是与他人分享&#xff0c;水印往往会影响图片的观赏效果&#xff0c;不过别担心我将向你介绍一些简单的方法&#xff0c;帮助你在相册中轻松去除这些水印…

解决docker tag打标签时报错:Error response from daemon: no such id

现象&#xff1a; 原因&#xff1a; docker tag时不仅仅要Repository仓库名&#xff0c;也需要原有的tag作为版本号 解决办法&#xff1a; docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决&#xff01;

适合汽车应用的MAX49017ATA/VY、MAX40025AAWT、MAX40025CAWT、MAX40026ATA/VY(线性)微功耗比较器

一、MAX49017ATA/VY 内置基准电压源的1.7V、双通道微功耗比较器 MAX49017是一款节省空间的双通道比较器&#xff0c;内置基准电压源&#xff0c;提供推挽输出。该器件通过了AEC-Q100认证&#xff0c;非常适合汽车应用&#xff0c;例如汽车电池监控系统、信息娱乐系统音响主机和…

冰点还原精灵 Deep Freeze 管理密码忘了怎么办?

环境&#xff1a; Win10 专业版 Deep Freeze V.8.63 问题描述&#xff1a; 冰点还原精灵 Deep Freeze 管理密码忘了怎么办&#xff1f; 解决方案&#xff1a; 1.找一台安装Deep Freeze V.8.63相同版本的电脑&#xff0c;进入PE复制C盘Persi0.sys文件 2.到要破解电脑上进入…

DAY 12 结构体(重点) 共用体 枚举01

1.结构体 1.概念 将基本类型或构造类型封装在一起&#xff0c;拥有独立空间&#xff0c;这个数据结构 就叫结构体。 结构体 使用的关键字 struct. 一个结构体可以定义多个结构体变量 2.定义 注意&#xff1a; 1,结构体定义一般在头文件中 2,不要在定义结构体时给其成员初始…

7.判断素数----不知道哪里错了

#include<stdio.h>void fun(int n) { int i;for(i2;i<n;i){if(n%i0)break;}if(in)printf("%d是素数\n",n);elseprintf("%d不是素数",n); }int main(){int n;scanf("d",&n);fun(n);return 0;}

王干娘和西门庆-UMLChina建模知识竞赛第4赛季第18轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先全部答对前3题&#xff0c;即可获得本轮优胜。 所有题目的回答必须放在同一条消息中&…

虚幻引擎:如何使用 独立进程模式进行模拟

第一步:先更改配置 第二步,在启动的两个玩家里面,一个设为服务器,一个链接进去地图就可以了 1.设置服务器 2.另一个玩家链接