V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xuelang
V2EX  ›  程序员

Redis 7.2 Issue 分析:流数据读写导致的“死锁”问题

  •  3
     
  •   xuelang ·
    selfboot · 2023-07-07 08:05:21 +08:00 · 1168 次点击
    这是一个创建于 512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Redis 项目中,一个名为 “[BUG] Deadlock with streams on redis 7.2” 的 issue 12290 吸引了我的注意。这个 bug 中,redis 服务器在处理特定的客户端请求时陷入了死循环,这个现象在 redis 这样的高性能、高可靠性的数据库系统中是极为罕见的。

    直接从 Github Release 7.2-rc2 下载 Reids 7.2 的源码,然后编译二进制。这里编译指令带上这两个 Flag make REDIS_CFLAGS="-Og -fno-omit-frame-pointer",方便后续分析工具能够拿到堆栈信息。复现步骤很简单,启动 Redis server ,接着运行 feeder.pysubscriber.py 这两个脚本。我们会看到订阅者在处理部分流之后会阻塞住,不再有输出。同时 Redis 进程的 CPU 直接飙到了 100%,新的 redis client 也连不上去服务器了,如下图。

    CPU 占用

    完整讨论在:

    Redis Issue 分析:流数据读写导致的“死锁”问题(1)
    Redis Issue 分析:流数据读写导致的“死锁”问题(2)

    第 2 篇其实还有待继续深挖

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:47 · PVG 17:47 · LAX 01:47 · JFK 04:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.