当前位置:首页 > 技术积累 > 正文内容

Redis内存占用率过高问题排查

竹林之风3年前 (2021-10-04)技术积累3633

        若使用了Redis的应用程序没有业务量或并发量的突然爆发,在常规情况下Redis内存占用率越来越高并有爆满的趋势,此时应立即排查原因。当感觉在处理完成之前Redis内存就会占满时,应果断采用增加内存等硬件升级方式先扩容后再排查。此类问题从Redis中目前有多少键、各键占用多大空间着手,从而判断是哪个应用程序哪段源程序在使用Redis方面有问题。

        快速回想哪些应用程序使用了Redis、源程序中使用Redis存储了哪些数据、各数据的过期时间多久等等,但通常临时很难想起诸多细节。若在开发应用程序时,增加了Redis调用的跟踪或统计日志,可以用这些日志作为参考,这些日志功能通常短时间无法开发完成。

        那么从Redis运行日志着手呢?恐怕也难以统计,所以先找找Redis的GUI管理工具,有内存占用分析功能的Redis GUI管理工具。四处搜索找到了Redis Insight这款软件WEB工具(当然可能还有其它满足需求的工具),它可以分析Redis内存占用情况,官网:https://redis.com/redis-enterprise/redis-insight/

        安装好后双击运行会自动打开浏览器,添加Redis连接信息并连接,然后依次点击Memory Analysis->Overview。Offline Analysis离线分析是通过rdb备份文件来分析(适用于无法直接连接生产环境Redis),Online Analysis在线分析是直接访问Redis服务器来分析,两种方式都可以。

QQ截图20211004215328.png

        分析完成后通过Overview菜单查看各数据类型键的内存占用量和数目、以及各有效期区间的键数量,通过该功能大致分析键是否过多、某些键是否占用过高内存、某些键是否有效期太长。然后点击菜单Memory Analyzor查看所有具体键,默认按内存占用率降序排列。

(1)若键过多,查看具体是哪些前缀的键过多,检查源程序是否可以删除不必要的键;

(2)若某些键过大,查看具体是哪些前缀的键过大,检查源程序是否可以压缩或是否未及时消费而堆积;

(3)若某些键有效期过久,查看具体是哪些前缀的键有效期过久检查源程序是否可以缩短有效期。

        倘若不用工具,那还可以直接使用redis-cli命令行工具或其它命令行工具,通过命令直接查询Redis的键数目、内存占用量、有效期等信息,例如redis-cli的KEYS命令等。


扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:https://www.9icode.com/index.php/post/359.html

标签: Redis
分享给朋友:

相关文章

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

ASP.NET网站自定义错误处理及其它安全相关

ASP.NET网站自定义错误处理及其它安全相关

        ASP.NET网站在运行过程中总是有可能报错,例如404等HTTP错误、500等程序异常。在IIS托管并报错的情况下,网站的默认行为依次是:(1).NET运行时接收并处理的部分显示.N...

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

        ASP.NET Core网站报“An assembly specified in the application dependencies ma...

ASP.NET MVC WebApi控制器方法使用async假死超时问题

ASP.NET MVC WebApi控制器方法使用async假死超时问题

        在一个ASP.NET MVC WebApi控制器方法中使用async标记为异步方法后,有时会假死超时。根本原因是同步方法和异步方法混合造成的死锁...

使用Nginx实现简单密码认证

使用Nginx实现简单密码认证

        假设一个网站没有实现登录认证功能,我们要临时增加一个简单的账号密码认证,可以使用Nginx来实现该功能。  server&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。