iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >redis 限制内存使用大小的实现
  • 765
分享到

redis 限制内存使用大小的实现

2024-04-02 19:04:59 765人浏览 八月长安
摘要

记录一次生产环境问题排查过程: 生产环境部署方式:Nginx + uwsgi + flask 问题描述: 发现生产环境中之前正常运行的服务突然不可用了,查看程序日志发现部分接口访问

记录一次生产环境问题排查过程:

生产环境部署方式:Nginx + uwsgi + flask

问题描述:

发现生产环境中之前正常运行的服务突然不可用了,查看程序日志发现部分接口访问时报I/O写错误,nginx acess.log显示504,error.log显示 upstream time out.
同时 netstat -apn | grep 6379 | wc -l 检查发现Redis存在大量连接,进一步检查发现其中大多为 SYN_SENT 包,连接大多归属于uwsgi 进程。

  因为程序中有很多接口被调用是会访问redis, 以为是redis连接池导致,对程序中的redis连接池进行优化后重启服务,刚启动时一切正常,Http 200, 但几分钟后服务再次挂掉,http 504.

检查系统资源使用情况,发现 kswapd0 进程CPU占用很高,这个进程是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用, 使用swap分区与内存换页操作交换数据,导致CPU占用过高, 再细看发现redis-server内存占用已超过100%:

在这里插入图片描述

进入redis中查看info memory和各存储数据的key下数据量,果然存在大量未处理完毕的数据。

到此问题终于是找到了。

设置redis最大占用内存


# 编辑redis配置文件,加入最大内存使用限制,我根据服务器的情况设置为3G
maxmemory 3221225472

设置redis数据过期策略:

redis中有6种过期策略:


# 根据LRU算法生成的过期时间来删除
# volatile-lru -> remove the key with an expire set using an LRU alGorithm
# 根据LRU算法删除任何key。
# allkeys-lru -> remove any key accordingly to the LRU algorithm
# 根据过期设置来随机删除key。
# volatile-random -> remove a random key with an expire set
# 无差别随机删。
# allkeys-random -> remove a random key, any key
# 根据最近过期时间来删除(辅以TTL)
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# 谁也不删,直接在写操作时返回错误。
# noeviction -> don't expire at all, just return an error on write operations

在redis配置文件中设置过期策略为:maxmemory-policy allkeys-lru

  一开始是设置为volatile-lru的,但是该策略只是清除设置过期时间的key值,因为很多key并没有设置过期时间。因此修改为maxmemory-policy allkeys-lru,指明非活跃近期很少用的key值清除.

  在使用maxmemory-policy allkeys-lru策略时,内存超限后将不再存储数据,但数据的读取删除操作不会受影响,超限时显示错误

OOM command not allowed when used memory > 'maxmemory'

在这里插入图片描述

重启程序,至此服务终于正常运行。

总结:本次的问题归根结底是redis中存储入了大量脏数据,但数据处理并没有及时的清理掉这部分数据,最终导致服务停滞,allkeys-lru策略有可能会将长期未用但实际有用的数据清理掉,所以还是应优化数据处理为主。

到此这篇关于redis 限制内存使用大小的实现的文章就介绍到这了,更多相关redis 限制内存内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: redis 限制内存使用大小的实现

本文链接: https://www.lsjlt.com/news/125414.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • redis 限制内存使用大小的实现
    记录一次生产环境问题排查过程: 生产环境部署方式:nginx + uwsgi + flask 问题描述: 发现生产环境中之前正常运行的服务突然不可用了,查看程序日志发现部分接口访问...
    99+
    2022-11-12
  • 如何在redis中限制内存的使用大小
    如何在redis中限制内存的使用大小?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。记录一次生产环境问题排查过程:生产环境部署方式:nginx + uwsgi +...
    99+
    2023-06-15
  • Oracle12c 新特性:限制PGA使用内存的大小
    我们都知道,在12c之前,对于PGA内存的管理是使用PGA_AGGREGATE_TARGET参数来控制的,但这个参数也只是一个参考值,Oracle实例只是尽量保证总的PGA使用量在这个值范围内,当会话使用的...
    99+
    2022-10-18
  • asp.netcore服务限制堆内存大小的操作方法
    目录前言1、asp.net core是什么2、限制其堆内存最大大小2.1 设置.NET 运行时的配置2.2 在项目中创建runtimeconfig.json配置文件2.2 限制堆的大...
    99+
    2022-11-13
  • 设置Redis最大占用内存的实现
    目录打开redis配置文件我们可以在CentOS下输入命令:find / -name redis查找redis目录:Redis使用超过设置的最大值使用info命令查看Redis内存使...
    99+
    2022-11-13
  • 如何限制你的Python程序所能使用的最大内存
    这篇文章主要讲解了“如何限制你的Python程序所能使用的最大内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何限制你的Python程序所能使用的最大内存”吧!为了限制Python程序所...
    99+
    2023-06-15
  • Android编程实现获得内存剩余大小与总大小的方法
    本文实例讲述了Android编程实现获得内存剩余大小与总大小的方法。分享给大家供大家参考,具体如下: public class memInfo { // 获得可用的内存 ...
    99+
    2022-06-06
    方法 Android
  • 在 Linux 中如何限制Python程序所能使用的最大内存
    这篇文章主要讲解了“在 Linux 中如何限制Python程序所能使用的最大内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“在 Linux 中如何限制Py...
    99+
    2022-10-19
  • docker修改容器内存大小的实现方式
    目录前言1.docker内存限制的两种方式2.方式一:-m参数限制3.方式二:修改hostconfig.json文件限制1.查找容器对应的hostconfig.json文件2.停止d...
    99+
    2022-11-13
  • MongoDB排序时内存大小限制与创建索引的注意事项详解
    目录参数internalQueryExecMaxBlockingSortBytesMongoDB 4.3的internalQueryMaxBlockingSortMemoryUsag...
    99+
    2022-11-13
  • 怎么通过PHP来实现文件大小限制的修改
    这篇“怎么通过PHP来实现文件大小限制的修改”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么通过PHP来实现文件大小限制的...
    99+
    2023-07-05
  • 使用Java实现Redis限流的方法
    1、概述   限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时,需要确保在10秒内发往支付模块的请求数量小于500个。限流...
    99+
    2022-11-12
  • 怎么用JOL测量对象真实的内存大小
    本文小编为大家详细介绍“怎么用JOL测量对象真实的内存大小”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用JOL测量对象真实的内存大小”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介绍一款工具(memory...
    99+
    2023-06-17
  • 如何限制你的Python程序所能使用的内存
    这篇文章主要讲解了“如何限制你的Python程序所能使用的内存”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何限制你的Python程序所能使用的内存”吧!如果程序开发不当,可能会出现占用过...
    99+
    2023-06-15
  • Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法
    本文实例讲述了Android实现获取SD卡总容量,可用大小,机身内存总容量及可用大小的方法。分享给大家供大家参考,具体如下: 可能有的同学不知道系统已经提供了获取获取SD卡总容...
    99+
    2022-06-06
    sd 方法 sd卡 Android
  • Docker Compose中如何限制容器的CPU和内存使用
    目录正文吐槽docker-compose限制CPU和内存验证总结正文 最近我在使用开源统计Umami过程中,发现CPU和内存经常占满,导致其它服务都不能正常使用。Umami我使用的d...
    99+
    2023-05-20
    Docker Compose限制CPU Docker Compose
  • Springboot使用redis实现接口Api限流的实例
    前言 该篇介绍的内容如题,就是利用redis实现接口的限流(  某时间范围内 最大的访问次数 ) 。 正文  惯例,先看下我们的实战目录结构: 首...
    99+
    2022-11-12
  • 使用SpringBoot + Redis 实现接口限流的方式
    目录配置限流注解定制 RedisTemplateLua 脚本注解解析接口测试全局异常处理Redis 除了做缓存,还能干很多很多事情:分布式锁、限流、处理请求接口幂等性。。。太多太多了...
    99+
    2022-11-13
  • 使用AOP+redis+lua做方法限流的实现
    目录需求实现方式源码Limit 注解LimitKeyLimitTypeRedisLimiterHelperLimitInterceptorTestService需求 公司里使用One...
    99+
    2022-11-13
  • Springboot使用redis实现接口Api限流的方法
    这篇文章主要介绍“Springboot使用redis实现接口Api限流的方法”,在日常操作中,相信很多人在Springboot使用redis实现接口Api限流的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作