美文网首页
Redis内存爆了怎么办?

Redis内存爆了怎么办?

作者: Travis_Wu | 来源:发表于2020-11-02 17:44 被阅读0次

    一、场景

    Redis在高并发系统中是不可或缺的中间件,由于它本身的高性能特性可以帮助我们解决很多业务场景。同时Redis也是运维工程师重点关注的。生产环境的Redis内存使用情况是必要的监控指标,Redis的稳定运行在一定程度上保证了生产环境的安全稳定运行。
    今天生产环境爆出了大量的 timeOut 502错误。去监控上查看一下,是Redis内存爆掉了,当时我慌的一批。


    二、解决办法

    Redis提供了一个配置参数maxmemory来限制内存超出期望大小。当实际内存超出 maxmemory 时,Redis 提供了几种可选策略 (maxmemory-policy) 来让 用户自己决定该如何腾出新的空间以继续提供读写服务。

    image.png
    名词解释:
    LRU:表示最近最少使用
    LFU:表示使用频率最低
    我们可以在redis.conf这个redis默认的配置文件中查看详细说明。
    image.png
    我们可以通过 Redis 的命令 CONFIG GET parameter 来查看当前Redis 运行的配置参数
    127.0.0.1:6379> CONFIG GET *memory*
    1) "maxmemory"
    2) "0"
    3) "maxmemory-samples"
    4) "5"
    5) "maxmemory-policy"
    6) "noeviction"
    

    通过 * 号通配符,我们看到 maxmemory-policy 的值为:noeviction,是不允许淘汰的。这个配置会导致当Redis内存满的时候拒绝写的请求,当Redis开始使用swap交换区的时候,你的读请求会超乎想象的慢。
    下面我使用 CONFIG SET 命令修改 Redis 的 maxmemory-policy 参数。使用此命令时不需要重启Redis,这也太友好了吧!
    接下来,我跟团队的小伙伴经过研究商讨决定修改为 volatile-lru,只要简单的执行一条命令就好了

    127.0.0.1:6379> CONFIG SET maxmemory-policy volatile-lru
    OK
    127.0.0.1:6379> 
    #再次确认下是否修改成功
    127.0.0.1:6379> CONFIG GET *memory*
    1) "maxmemory"
    2) "0"
    3) "maxmemory-samples"
    4) "5"
    5) "maxmemory-policy"
    6) "volatile-lru"
    

    相关文章

      网友评论

          本文标题:Redis内存爆了怎么办?

          本文链接:https://www.haomeiwen.com/subject/whimvktx.html