zoukankan      html  css  js  c++  java
  • REDIS-内存OOM-LRU挤掉KEY

    问题描述:
    开发人员反应有一个redis从库,数据比其他集群中的数据少,导致应用出现问题。

    # Keyspace
    db0:keys=73,expires=5,avg_ttl=0 ----正常数据

    # Keyspace
    db0:keys=60,expires=5,avg_ttl=0 ----异常数据

    =============
    问题分析:
    ----------
    检查操作系统日志,没有发现问题。
    # cat /var/log/messages
    ----------
    检查redis日志,没有发现问题。
    $ tail -f redis_server_6379.log

    ----------
    检查配置文件,没有发现问题。
    cat /usr/local/redis/redis.conf

    ----------
    删除dump.rdb文件并重启redis,重置从库
    观察redis发现keys=73,但是2分钟以后下降到keys=60


    ----------
    监控redis运行命令,没有发现问题。
    # /usr/local/redis/bin/redis-cli -a xxx -h xxx -p xx monitor|grep -v "hget"

    ----------
    尝试写入一条数据
    set a a1
    报错OOM


    检查内存信息: info memory
    # Memory
    used_memory:5834791440 --由 Redis 分配器分配的内存总量
    used_memory_human:5.43G --使用的内存量。
    used_memory_rss:4738400256
    used_memory_rss_human:4.41G
    used_memory_peak:5836954968
    used_memory_peak_human:5.44G
    used_memory_peak_perc:99.96% --使用内存达到峰值内存的百分比
    used_memory_overhead:1075204528
    used_memory_startup:786664
    used_memory_dataset:4759586912 --数据占用的内存大小
    used_memory_dataset_perc:81.58% --数据占用的内存大小的百分比
    total_system_memory:16657612800
    total_system_memory_human:15.51G
    used_memory_lua:37888
    used_memory_lua_human:37.00K
    maxmemory:4294967296
    maxmemory_human:4.00G
    maxmemory_policy:noeviction
    mem_fragmentation_ratio:0.81

    观察到的现象:
    used_memory_dataset_perc 达到100% ,内存溢出
    redis内部算法,会删除一部分key,可以使用 monitor 命令观察到。

    当删除一部分key之后,db0:keys=60,used_memory_dataset_perc:81.58%
    redis状态趋于稳定。

    临时解决方法:
    注释掉最大内存限制:
    vim redis.conf
    #maxmemory 4294967296

    重启之后发现,
    db0:keys=73,expires=5,avg_ttl=0

    一切正常。

    检查内存信息: info memory
    # Memory
    used_memory:5834791440 --由 Redis 分配器分配的内存总量
    used_memory_human:5.43G --使用的内存量。

    内存使用量达到了5.43G

    最初给的内存最大值为4G,说明给的内存过小。
    确认问题为used_memory参数设置太小。应该把最大值调大。


    ----------
    注释掉used_memory存在的隐患:
    如果内存使用继续增大,os内存耗尽,操作系统可能变的不稳定。

  • 相关阅读:
    Django01
    WEB框架介绍
    前端插件介绍
    JQuery
    DOM
    js
    css
    HTML
    图片懒加载
    js中style,currentStyle和getComputedStyle的区别
  • 原文地址:https://www.cnblogs.com/monkeybron/p/11651530.html
Copyright © 2011-2022 走看看