与django(和gunicorn + gevent)的postgresql空闲连接

时间:2013-04-09 21:39:11

标签: django psycopg2 gevent gunicorn django-postgresql

我的堆栈包含django(1.4.3),psycopg2(0.0.3)和postgres(9.1)。另外,我正在使用psycogreen.gevent.patch_psycopg,因为我正在用gunicorn和gevent提供我的django。

一切看起来都很开心,但我得到了很多(约40个)开放式数据库连接。直到我在django数据库设置中将'autocommit'设置为True,它们都是“在事务中空闲”。现在他们都只是“闲着”。

以下是我的pg_top输出示例。

last pid: 22043;  load avg:  0.09,  0.05,  0.05;       up 6+21:49:58                                                    16:21:08
45 processes: 45 sleeping
CPU states:  3.0% user,  0.9% nice,  0.2% system, 96.0% idle,  0.0% iowait
Memory: 871M used, 130M free, 32M buffers, 530M cached
Swap: 10M used, 246M free, 2192K cached

  PID USERNAME PRI NICE  SIZE   RES STATE   TIME   WCPU    CPU COMMAND
10035 postgres  39   19   51M 6668K sleep   0:00  0.00%  0.00% postgres: user production 127.0.0.1(41309) idle                  
16783 postgres  39   19   51M 6652K sleep   0:00  0.00%  0.00% postgres: user production 127.0.0.1(42426) idle                  
10034 postgres  39   19   51M 6640K sleep   0:00  0.00%  0.00% postgres: user production 127.0.0.1(41308) idle                  
12690 postgres  39   19   51M 6604K sleep   0:00  0.00%  0.00% postgres: user staging 127.0.0.1(36931) idle                   
10293 postgres  39   19   51M 6704K sleep   0:00  0.00%  0.00% postgres: user staging 127.0.0.1(36931) idle 

...还有36条像上面那样的行。

这是psycogreen的设置我的gunicorn.conf:

def post_fork(server, worker):
    from psycogreen.gevent import patch_psycopg
    patch_psycopg()

两个问题:

  1. 所有这些开放式连接都可以吗?它看起来像浪费了很多内存。
  2. 这与gevent或psycogreen有关吗?我没有在任何greenlets中明确使用数据库。
  3. 我已经阅读了很多关于django保持打开的数据库连接的内容,但这一切似乎都来自大约2年前django(https://code.djangoproject.com/ticket/9964#comment:51)中仍有一个开放的bug。

    非常感谢任何见解。

0 个答案:

没有答案