V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
geew
V2EX  ›  Python

有关 redis-py 连接池会导致服务器产生大量 CLOSE_WAIT 的再讨论以及一个解决方案

  •  
  •   geew · 2017-12-22 18:23:41 +08:00 · 4205 次点击
    这是一个创建于 2555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天服务器突然提示一台 redis 无法连接了 登上去一看 发现到这个 redis 服务器的连接基本都是 CLOSE_WAIT 状态 有十几万条 导致没法再建立新的连接
    至于 redis 的用法也是 很传统的用法 就是服务启动的时候会初始化一个 redis.StrictRedis 的连接 然后就直接用
    至于连接池 其实 StrictRedis 内部的实现就是用连接池的

    后来查了 google 发现这个
    http://russellluo.com/2017/10/redis-py-pool-cannot-handle-idle-close-wait-connections.html
    v2 上也有人发过讨论: https://www.v2ex.com/t/237326 但没有提供解决方案

    参考了第一个的方案 改进了一下 redis 连接池的 get_connection 方法 更新上去之后 效果很明显 确保了一个进程一条连接 失效了重新建立新的连接
    看起来很完美的样子

    我的疑问就是 既然都有这个问题 也有解决方案在那里 为什么这个 issue 都没人关注呢 还是大家都没遇到过这个问题吗
    9 条回复    2017-12-23 07:12:38 +08:00
    jingniao
        1
    jingniao  
       2017-12-22 21:33:16 +08:00 via Android
    这叫我想起来之前遇到过的数据库连接未释放的问题了,关注生命周期是关键
    est
        2
    est  
       2017-12-22 22:11:55 +08:00   ❤️ 1
    redis-py 真是想各种吐槽

    - 连接池不能负载均衡
    - 连接池不能读写分离
    - zadd 不支持 nx 等参数
    - zadd 那个坑死无数新人的参数顺序。
    lolizeppelin
        3
    lolizeppelin  
       2017-12-22 22:19:12 +08:00 via Android
    你们用都不看源码的么 那个链接池简陋得连心跳都没 你们也直接用
    geew
        4
    geew  
    OP
       2017-12-22 22:31:18 +08:00
    @lolizeppelin #3 源码看了 确实简陋 有别的选择吗 基本都在用这个库的吧
    geew
        5
    geew  
    OP
       2017-12-22 23:32:05 +08:00
    @est #2 确实 有更好的库可以选择吗
    lolizeppelin
        6
    lolizeppelin  
       2017-12-22 23:32:25 +08:00 via Android
    当然自己重新封装 自己写心跳啊
    swulling
        7
    swulling  
       2017-12-22 23:34:09 +08:00
    https://github.com/andymccurdy/redis-py/pulls

    吐槽不如提 Pull Request 就好了
    swulling
        8
    swulling  
       2017-12-22 23:36:24 +08:00
    如果发现已经有 Pull Request,+1 求合并就好了,求合并的人多了,自然受重视

    如果只是默默吐槽,那就不怪别人了
    lolizeppelin
        9
    lolizeppelin  
       2017-12-23 07:12:38 +08:00 via Android
    没用的 对比下 kombu 的代码 就知道了 这玩意就是个基本接口根本没打算做全功能

    就算是 kombu openstack 还再封装过一遍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2109 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.