紧急求助,为什么 redis 用 info 看到有两百万左右 key,但是用 save 命令 dump 处理只有几万呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sujin190
V2EX    Redis

紧急求助,为什么 redis 用 info 看到有两百万左右 key,但是用 save 命令 dump 处理只有几万呢?

  •  
  •   sujin190
    snower 2018-04-09 08:56:38 +08:00 7847 次点击
    这是一个创建于 2817 天前的主题,其中的信息可能已经有所发展或是发生改变。

    崩了。。求助

    19 条回复    2018-04-10 11:42:16 +08:00
    jyf
        1
    jyf  
       2018-04-09 10:05:26 +08:00   1
    至少你要给个两个命令输出信息的截图啊
    sujin190
        2
    sujin190  
    OP
       2018-04-09 11:12:39 +08:00
    @jyf #1 就是 redis-cli info 之后看到 key space 加起来有将近 200 多万 key,忘了保存截图了
    唉,惊讶的发现 slave 切 master 之后,瞬间数据 key space 信息只剩 30 多万 key 了,血崩。。
    monsterxx03
        3
    monsterxx03  
       2018-04-09 11:16:08 +08:00 via iPhone   1
    因为你里面有很多 expire 的 key,忘了哪个版本之前,del 是不会同步到 slave 的,所以切了之后一下次全部 expire 了
    sujin190
        4
    sujin190  
    OP
       2018-04-09 11:20:30 +08:00
    @monsterxx03 #3 还是 2.8,那么 slave 的内存怎么回收呢? bgsave 的时候似乎能处理过期问题,这跪了。。
    judeng
        5
    judeng  
       2018-04-09 11:25:04 +08:00   1
    info 命令显示的包含过期键,过期键 bgsave 时不会同步到 slave 上
    rrfeng
        6
    rrfeng  
       2018-04-09 12:11:19 +08:00 via Android
    keys
    expires
    楼主没学好英文吗?
    sujin190
        7
    sujin190  
    OP
       2018-04-09 12:39:49 +08:00
    @rrfeng #6。。。这个不是重点好吧,先解决问题才是
    sujin190
        8
    sujin190  
    OP
       2018-04-09 12:41:50 +08:00
    @judeng #5 好吧,slave 有不自动 bgsave 是啥问题? redis 坑还不少啊,感觉
    swulling
        9
    swulling  
       2018-04-09 12:45:16 +08:00
    expire 的 key 没有不是很正常么,为啥叫雪崩?
    monsterxx03
        10
    monsterxx03  
       2018-04-09 12:45:57 +08:00   2
    其实你应该可以不用管, 数据并没丢,只是 expire 的 key 被删除了, redis 的清除过期 key 的机制有好几种, 如果你去读 slave, 读到一个 过期的 key 会在访问时删除,如果内存达到了你设置的 max-memory, 过期的 key 会被优先踢出去.

    info 看到的里面 keys 是包含过期 key 的.
    judeng
        11
    judeng  
       2018-04-09 16:02:03 +08:00
    @sujin190 没看不懂问题; redis 不会自动 bgsave,不管是 master 还是 slave
    sujin190
        12
    sujin190  
    OP
       2018-04-09 20:03:31 +08:00
    @judeng #11 slave,从某天开始突然不 bgsave,又没注意,被坑了,不知道这种情况会是啥问题,难道是内存不足,无法完成 bgsave 么?

    master 是关闭持久化的,虽然是 bgsave 但是,似乎还是导致延时上涨,所有就由 slave 来 bgsave 了
    sujin190
        13
    sujin190  
    OP
       2018-04-09 20:05:01 +08:00
    @swulling #9 血崩,表示我现在很崩溃,master 被系统 kill 掉了,slave 的 bgsave 自己停了,数据也不知道哪去了大半。。。
    sujin190
        14
    sujin190  
    OP
       2018-04-09 20:06:20 +08:00
    @monsterxx03 #10 哦,master 被系统 kill 掉了,从库数据只剩一小半,奇怪了,说起来怎么防止 redis 被系统 oom kill 掉呢?
    monsterxx03
        15
    monsterxx03  
       2018-04-09 20:12:59 +08:00 via iPhone   1
    搜下 redis vm.overcommit_memory,估计你没设才会在 bgsave 的时候 oom,但还是要设置下 redis 的 max memory,占用内存到物理内存肯定会被 kill
    sujin190
        16
    sujin190  
    OP
       2018-04-09 23:09:04 +08:00
    @monsterxx03 #15 好的,我研究下,感谢!
    kimown
        17
    kimown  
       2018-04-10 07:17:01 +08:00 via Android
    @sujin190
    解决后能分享下问题原因吗
    catinred
        18
    catinred  
       2018-04-10 10:05:02 +08:00
    建议楼主先读读 Redis 的 FAQ https://redis.io/topics/faq
    sujin190
        19
    sujin190  
    OP
       2018-04-10 11:42:16 +08:00   1
    @kimown #17 slave 最后同步 master 的时间是正常的,bgsave 无法成功应该是内存不足的问题,可以看 @monsterxx03 #15 的提示

    master 被系统 oom killer 是因为整台机器都给 redis 用了,所以没有设置最大内存使用,也没有设置 swap,redis 有峰值使用所以差不多申请了所有的物理内存,虽然平时只用差不多一般,机器上还部署有监控系统的 agent,所以其在某次申请内存的时候触发了系统 oom killer,也没有对 redis 进程的 oom_adj 进行特别设置,所以系统果断 kill 掉了 redis 进程

    数据少了大半的问题就简单了,发现时 redis 已经被 kill 掉了一晚上了,所以都过期了啊

    可以看看这个 https://cachecloud.github.io/2017/02/16/Redis%E7%9A%84Linux%E7%B3%BB%E7%BB%9F%E4%BC%98%E5%8C%96/

    说起来做了监控,但没加 redis 的告警,业务使用 redis 连不上也不出系统错误,而是除了其他业务错误,导致其他系统告警完全忽略了,也是自己给自己挖了好大的坑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4858 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 03:56 PVG 11:56 LAX 19:56 JFK 22:56
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86