Redis导致半夜数据库突发宕机,该怎样排查化解?
发布时间:2025年09月24日 12:18
redis-cli CONFIG SET slowlog-log-slower-than 6000
也可以在 Redis.config 配有份文件当中设立,以微秒为单位。 就让要发送给所有制订一段时两者之间相当快的擅自,可以通过应用于 Redis-cli 用以,可用 slowlog get 擅自发送给,赶完结果的第三个多达组以微秒位单位标示出擅自的制订一段时两者之间。 假如只须要发送给先一 2 个快擅自,可用 slowlog get 2 才可。请留意:得到都只2个快查阅擅自
127.0.0.1:6381> SLOWLOG get 2
1) 1) (integer) 6
2) (integer) 1458734263
3) (integer) 74372
4) 1) "hgetall"
2) "max.dsp.blacklist"
2) 1) (integer) 5
2) (integer) 1458734258
3) (integer) 5411075
4) 1) "keys"
2) "max.dsp.blacklist"
以第一个 HGET 擅自为例分析,每个 slowlog 实体共 4 个多达组: 多达组 1:1 个整多达,暗示这个 slowlog 再次出现的批次,server 触发后递增,近期为 6。 多达组 2:暗示查阅制订时的 Unix 一段时两者之间手脚。 多达组 3:暗示查阅制订微秒多达,近期是 74372 微秒,约 74ms。 多达组 4: 暗示查阅的擅自和给定,如果给定很多或相当大,只亦会标示出外给定个多达。近期擅自是hgetall max.dsp.blacklist。2)Latency Monitoring
Redis 在 2.8.13 旧版本过渡到了 Latency Monitoring 必要,用于以秒为薄板控管各种政治事件的发生振幅。 投入使用过长监视器的第一步是设立过长阈多达值(单位毫秒)。只有有约该阈多达值的一段时两者之间才亦会被记录下来,比如我们根据孔径机动性(3ms)的 3 倍设立阈多达值为 9 ms。 可以用 redis-cli 设立也可以在 Redis.config 当中设立;CONFIG SET latency-monitor-threshold 9
用以记录下来的相关政治事件的详情可发送给官方元数据: 如得到都只的 latency127.0.0.1:6379> debug sleep 2
OK
(2.00s)
127.0.0.1:6379> latency latest
1) 1) "command"
2) (integer) 1645330616
3) (integer) 2003
4) (integer) 2003
政治事件的名称; 政治事件发生的同类型过长的 Unix 一段时两者之间手脚; 毫秒为单位的一段时两者之间过长; 该政治事件的小得多过长。 如何妥善解决 Redis 减缓? Redis 的多达据库管理系统习写由单驱动流程制订,如果单驱动流程制订的操控一段时两者之间就让像当中长,就亦会加剧单驱动流程溢。 朋友们分析下都有哪些操控亦会溢单驱动流程,我们又该如何妥善解决? 3、局域网通信加剧的过长 用户端应用于 TCP/IP 连接起来或 Unix 域连接起来连接起来到 Redis。1 Gbit/s 局域网的典型过长约为 200 us。 redis 用户端制订一条擅自分 4 个流程: 发送擅自-〉 擅自排队 -〉 擅自制订-〉 赶完结果 这个流程称为 Round trip time(简称 RTT, 往返一段时两者之间),mget mset 有效节省时两者之间了 RTT,但大外擅自(如 hgetall,并无法 mhgetall)不支持批使用量操控,须要消耗 N 次 RTT ,这个时候须要 pipeline 来妥善解决这个疑问。 Redis pipeline 将多个擅自连接起来在朋友们来减缓局域网号召往返次多达。 redis-pipeline 4、快可执行加剧的过长 根据上文的快可执行控管查阅元数据,查阅到快查阅可执行。可以通过请注意两种方式也妥善解决: 比如在 Cluster 战斗群当中,将交联运算等 O(N) 操控直通在 slave 上,或者在用户端顺利进行。 应用于高效的擅自替换成。应用于近期迭代的方式也,不必要一次查阅大使用量多达据库管理系统,具体请发送给SCAN、SSCAN、HSCAN和ZSCAN擅自。 除此之外,生产当中禁用KEYS 擅自,它只一般而言于调试。因为它亦会遍历所有的键多达值对,所以操控延时高。 5、Fork 转换成 RDB 加剧的过长 转换成 RDB 静态,Redis 不能 fork 前台发挥作用。fork 操控(在单驱动流程当中直通)本身亦会加剧过长。 Redis 应用于操控管理系统的多发挥作用写时解码新科技 COW(Copy On Write) 来妥善解决疑问静态专一简化,减缓闪存迁走。 写时解码新科技保证静态其两者之间多达据库管理系统可更改 但 fork 亦会相关到解码大使用量镜像并不一定,一个 24 GB 的大型 Redis 示例须要 24 GB / 4 kB * 8 = 48 MB 的页表。 制订 bgsave 时,这将相关相应和解码 48 MB 闪存。 此外,从库加载 RDB 其两者之间难以共享习写增值,所以主库的多达据库管理系统使用量一般来说控制在 2~4G 大约,让从库较慢的加载顺利进行。 6、闪存大页(transparent huge pages) 常规的闪存页是按照 4 KB 来相应,Linux 内核从 2.6.38 开始支持闪存大页必要,该必要支持 2MB 一般来说的闪存页相应。 Redis 应用于了 fork 转换成 RDB 做专一简化共享了多达据库管理系统通用性保证。 当转换成 RDB 静态的流程当中,Redis 转用**写时解码**新科技使得单驱动流程一直可以接收用户端的写恳求。 也就是当多达据库管理系统被更改的时候,Redis 亦会解码一份这个多达据库管理系统,先顺利进行更改。 转用了闪存大页,转换成 RDB 其两者之间,即使用户端更改的多达据库管理系统只有 50B 的多达据库管理系统,Redis 须要解码 2MB 的大页。当写的可执行相当多的时候就亦会加剧大使用量的原件,加剧机动性减缓。 应用于请注意可执行禁用 Linux 闪存大页才可:echo never> /sys/kernel/mm/transparent_hugepage/enabled
7、swap:操控管理系统分页 当物理闪存(闪存条)实在用的时候,将外闪存上的多达据库管理系统对等到 swap 室内空两者之间上,以便让管理系统不亦会因闪存实在用而加剧 oom 或者越远来越远致命的不太可能再次出现。 当某发挥作用向 OS 恳求闪存推断出不足时,OS 亦会把闪存当中因故不用的多达据库管理系统交被弃去,放于 SWAP 分区当中,这个流程称为 SWAP OUT。 当某发挥作用又须要这些多达据库管理系统且 OS 推断出还有空闲物理闪存时,又亦会把 SWAP 分区当中的多达据库管理系统对等完物理闪存当中,这个流程称为 SWAP IN。 闪存 swap 是操控管理系统里将闪存多达据库管理系统在闪存和驱动器两者之间来完换入和被弃的必要,相关到驱动器的习写。 触发时 swap 的不太可能有哪些呢? 对于 Redis 而言,有两种类似于的不太可能: Redis 应用于了比可用闪存越远来越远多的闪存; 与 Redis 在同一一台直通的其他发挥作用在制订大使用量的份文件习写 I/O 操控(包括转换成大份文件的 RDB 份文件和 AOF 前台驱动流程),份文件习写迁走闪存,加剧 Redis 获得的闪存减缓,触发时了 swap。 我要如何排查断言因为 swap 加剧的机动性减缓呢? Linux 共享了很好的用以来排查这个疑问,所以当不以为然由于对等加剧的过长时,只即可按照请注意迭代排查。 1)得到 Redis 示例 pid$ redis-cli info | grep process_id
process_id:13160
转回此发挥作用的 /proc 份缓存清单:cd /proc/13160
在这里有一个 smaps 的份文件,该份文件所述了 Redis 发挥作用的闪存布局,直通请注意可执行,用 grep 匹配所有份文件当中的 Swap 多达组。$ cat smaps | egrep '^(Swap|Size)'
Size: 316 kB
Swap: 0 kB
Size: 4 kB
Swap: 0 kB
Size: 8 kB
Swap: 0 kB
Size: 40 kB
Swap: 0 kB
Size: 132 kB
Swap: 0 kB
Size: 720896 kB
Swap: 12 kB
每行 Size 暗示 Redis 示例所用的一块闪存一般来说,和 Size 下方的 Swap 并不相同这块 Size 一般来说的闪存区外有多少多达据库管理系统之前被被弃到驱动器上了。 如果 Size == Swap 则暗示多达据库管理系统被完全被弃了。 可以就让到有一个 720896 kB 的闪存一般来说有 12 kb 被被弃到了驱动器上(仅对等了 12 kB),这就只不过疑问。 Redis 本身亦会应用于很多一般来说不一的闪存块,所以,你可以就让到有很多 Size 行,有的极小,就是 4KB,而有的相当大,例如 720896KB。不同闪存块被被弃到驱动器上的一般来说也不一样。 掰重点了! 如果 Swap 早就 0 kb,或者零星的 4k ,那么一切正常。 当再次出现百 MB,甚至 GB 最高级别的 swap 一般来说时,就表明,此时,Redis 示例的闪存舆论压力相当大,很有不太可能亦会减缓。 2)提高效率 增加一台闪存; 将 Redis 放于单独的一台上直通,不必要在同一一台上直通须要大使用量闪存的发挥作用,从而依赖于 Redis 的闪存即可求; 增加 Cluster 战斗群的使用使用量分担多达据库管理系统使用量,减缓每个示例所即可的闪存。 8、AOF 和驱动器 I/O 加剧的过长 为了保证多达据库管理系统通用性,Redis 应用于 AOF 和 RDB 静态妥善解决疑问较慢恢复和专一简化。 可以应用于 appendfsync 配有将 AOF 配有为以三种不同的方式也在驱动器上制订 write 或者 fsync (可以在直通时应用于 CONFIG SET擅自更改此设立,比如:redis-cli CONFIG SET appendfsync no)。 no:Redis 不制订 fsync,唯一的过长来自于 write 驱动流程,write 只须要把日志记录下来写到内核即可将就可以赶完。 everysec:Redis 量制订一次 fsync。应用于前台子驱动流程异步顺利进行 fsync 操控。最多取走 1s 的多达据库管理系统。 always:每次写入操控都亦会制订 fsync,然后用 OK 字符串无论如何用户端(确实上 Redis 亦会试图将同时制订的许多擅自聚集到单个 fsync 当中),无法多达据库管理系统取走。在这种方式下,机动性有时候非常低,强烈建议应用于较慢驱动器和可以在短一段时两者之间内制订 fsync 的份缓存妥善解决疑问。 我们有时候将 Redis 用于磁盘,多达据库管理系统取走完全恶意从多达据库管理系统得到,并不须要极高的多达据库管理系统通用性,建议设立成 no 或者 everysec。 除此之外,不必要 AOF 份文件过大, Redis 亦会顺利进行 AOF 编写,转换成变小的 AOF 份文件。 可以把配有项 no-appendfsync-on-rewrite设立为 yes,暗示在 AOF 编写时,不顺利进行 fsync 操控。 也就是说,Redis 示例把写擅自写到闪存后,不驱动流程前台驱动流程顺利进行 fsync 操控,就这样一来赶完了。 9、expires 出局到期多达据库管理系统 Redis 有两种方式也出局到期多达据库管理系统: 惰性越远来越远正:当接收恳求的时候推断出 key 之前到期,才制订越远来越远正; 除此以外越远来越远正:每 100 毫秒越远来越远正一些到期的 key。 除此以外越远来越远正的线性如下: 随机滤波 A CTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP个多达的 key,越远来越远正所有到期的 key; 如果推断出还有有约 25% 的 key 已到期,则制订迭代一。 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP普通用户设立为 20,量制订 10 次,越远来越远正 200 个 key 疑问略有。 如果触发时了第二条,就亦会加剧 Redis 一致在越远来越远正到期多达据库管理系统去扣留闪存。而越远来越远正是溢的。 码哥,触发时必即可是什么呀? 也就是大使用量的 key 设立了相同的一段时两者之间给定。同一秒内,大使用量 key 到期,须要重复越远来越远正多次才能提高到 25% 请注意。 都是:大使用量同时到期的 key 不太可能亦会加剧机动性波动。 1)提高效率 如果一批 key 的确是同时到期,可以在 EXPIREAT 和 EXPIRE 的到期一段时两者之间给定上,受制于一个一定一般来说一般而言各地区的随机多达,这样,既保证了 key 在一个区内一段时两者之间一般而言各地区被越远来越远正,又不必要了同时到期造成的舆论压力。 10、bigkey 有时候我们亦会将含有较少多达据库管理系统或含有大使用量团员、沙罗多达的 Key 称作大 Key,下面我们将用几个确实的例子对大 Key 的不同之处顺利进行所述: 一个 STRING 多种类型的 Key,它的多达值为 5MB(多达据库管理系统过大) 一个 LIST 多种类型的 Key,它的沙罗使用使用量为 10000 个(沙罗使用使用量但会) 一个 ZSET 多种类型的 Key,它的团员使用使用量为 10000 个(团员使用使用量但会) 一个 HASH PDF的 Key,它的团员使用使用量虽然只有 1000 个但这些团员的 value 总一般来说为 10MB(团员尺寸过大) bigkey 带来疑问如下: Redis 闪存迅速变大招致 OOM,或者达到 maxmemory 设 置多达值招致写溢或重要 Key 被赶出; Redis Cluster 当中的某个 node 闪存远超其余 node,但因 Redis Cluster 的多达据库管理系统迁离最小薄板为 Key 而难以将 node 上的闪存均衡简化; bigkey 的习恳求迁走过大带宽,自身减缓的同时阻碍到该增值器上的其它增值; 越远来越远正一个 bigkey 造成主库较长一段时两者之间的溢并招致同步当中断或主从转换; 1)匹配 bigkey 应用于 redis-rdb-tools 用以以定制简化方式也找出大 Key。 2)提高效率 对大 key 重组 如将一个含有多达万团员的 HASH Key 重组为多个 HASH Key,并确保每个 Key 的团员使用使用量在不合理一般而言范围,在 Redis Cluster 结构当中,大 Key 的重组对 node 两者之间的闪存有利于必即可起到很大抑制作用。 异步清理大 key Redis 自 4.0 起共享了 UNLINK 擅自,该擅自必即可以非溢的方式也缓快逐步的清理风行的 Key,通过 UNLINK,你可以安全及的越远来越远正大 Key 甚至特大 Key。 阐释 如下体检清单,设法你在察觉到 Redis 机动性减缓的时候能高效妥善解决疑问: 得到近期 Redis 的孔径机动性; 开启快可执行控管,定位快可执行加剧的疑问; 找快可执行,应用于 scan 的方式也; 将示例的多达据库管理系统一般来说控制在 2-4GB,不必要主从解码加载过大 RDB 份文件而溢; 禁用闪存大页,转用了闪存大页,转换成 RDB 其两者之间,即使用户端更改的多达据库管理系统只有 50B 的多达据库管理系统,Redis 须要解码 2MB 的大页。当写的可执行相当多的时候就亦会加剧大使用量的原件,加剧机动性减缓。 Redis 应用于的闪存断言过大加剧 swap; AOF 配有断言不合理,可以将配有项 no-appendfsync-on-rewrite 设立为 yes,不必要 AOF 编写和 fsync 竞争驱动器 IO 水资源,加剧 Redis 过长增加。 bigkey 亦会带来一系列疑问,我们须要顺利进行重组防止再次出现 bigkey,并通过 UNLINK 异步越远来越远正。 作者丨 码哥bit举例来说丨公众号: 码哥bit(ID:MageByte)
dbaplus贡献者热烈欢迎广大人员投稿,投稿邮箱:editor@dbaplus.cn 越远来越远多精彩内容 dbaplus贡献者下期电视直播【戏仿接力丨阳原生下的SRE进简化之交叉路口】将于6月8日晚20点播送,dbaplus贡献者邀请到浙江完转 SRECEO-史军艇、哔哩哔哩基础架构部 SRE经济体制经理-刘昊在时以汇聚,愿意通过汇集两位SRE专家的研究成果和创造性地,给大家在阳原生的SRE进简化之交叉路口上,共享借鉴和深刻阻碍。解码下方镜像到腾讯,可以用小流程拍下哦~ 电视直播电话号码: 添加电视直播助理腾讯(dbafeifei),还可获得加入SRE基调交流群等越远来越远多福利哦~ 关于我们dbaplus贡献者是围绕Database、BigData、AIOps的软件管理系统机械工程贡献者。资深大芒果、新科技杂货,每天珍品原创文章推送,每周线上新科技分享,每月都将新科技沙龙,每季度GdevopsWildDAMS行业大亦会。
关心公众号【dbaplus贡献者】,得到越远来越远多原创新科技文章和主打用请注意载。郑州白癜风专科医院哪个好海南白癜风检查
银川看白癜风去哪里最好
杭州妇科医院专家预约挂号
北京看妇科去哪家医院好
病毒性感冒
咳嗽有痰吃什么药
治支气管炎咳嗽的药有什么
成都曙光医院
经期延长
上一篇: 苏州,重逢,第一日
下一篇: 中国航天,宇宙级时髦!
- 宠多了会恃宠生娇的四大星图女
- 下周起,财神爷眷顾,横财滚滚袭来,3星座事业顺遂,想不富都枉
- 让渣男怀疑人生的星座女 情场功夫霸气侧漏
- 5月财神爷承蒙关照,事业脱离困境,运势良好的三二十四节气
- 4月中下旬,幸福即将来临,成功逆袭,日子大有盼头的生肖
- 18.19号霉运消散,“吉孕”上上签,付出代价能和气生财的生肖
- 星巫塔罗:双子座未来60天,甜蜜誓言不变,生生世世认定他
- 未来一周三宝大驾光临,3属相财路大开,风生水起!
- 5月上旬前景明朗,财力不可阻挡,皇天没有时时的3生肖
- 1,2,3号迎财阿是、横财天降、当选运旺、桃花易来3大生肖
- 未来的一周,外出遇到嫔,大运迫在眉睫,财富数不清,有万贯家财的3生肖
- 5月底上旬运气好,又赚钱又胖,稍微大赚点的3生肖
- 预见一周,事业腾达,运势一个接一个,财运暴涨,幸福就在身边的3生肖
- 5月上旬万事如意,运势越来越顺利,鱼跃龙门的3月历