redis 产生大量 CLOSE_WAIT?

2015-11-19 14:51:25 +08:00
 BeginMan

Python 操作 redis 时,由于 redis 实例线程安全,所以我使用了两种方式:

(1).直接做全局变量,如下:

R = redis.Redis()
# 导入到多个需要使用 redis 的模块中,直接使用,如:
R.get('name')

(2).连接池,如下:

class mRedis(object):
    def __init__(self, db=0):
        self.db = db
        self.redis_pool = redis.ConnectionPool(host=settings.redis_svr_addr,
                                               port=settings.redis_svr_addr_port,
                                               db=self.db,
                                               password=settings.redis_svr_pass)


    def getR(self):
        return redis.Redis(connection_pool=self.redis_pool)

# 实例化直接使用
myredis = mRedis(db=0).getR()

但是在使用过程中,产生了大量 CLOSE_WAIT.,一大屏幕,如下:

tcp        1      0 127.0.0.1:62286             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15153             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:14972             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15134             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15030             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:62486             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15097             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:4912              127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:14517             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15155             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:59812             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15031             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15121             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:14812             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:59806             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:14813             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:14928             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:63476             127.0.0.1:6379              CLOSE_WAIT
tcp        1      0 127.0.0.1:15048             127.0.0.1:6379              CLOSE_WAIT

其中 redis.conf 设置 timeout 200

而且时常会出现 redis 连接超时的问题,导致 tornado 一直阻塞请求,看了下带宽,负载,CPU,内存都比较正常,暂时找不到原因,不知道是 redis 使用方面出了什么问题?求指点!!:-D

6192 次点击
所在节点    问与答
22 条回复
pubby
2015-11-19 21:12:52 +08:00
@e1eph4nt 抱歉, netstat 输出源地址和目标地址我确实看反了。
zhu123456
2018-12-25 16:03:58 +08:00
楼主 您好,请问您当时这个问题最后是怎么解决的?十分感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/237326

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX