我的堆栈包含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()
两个问题:
我已经阅读了很多关于django保持打开的数据库连接的内容,但这一切似乎都来自大约2年前django(https://code.djangoproject.com/ticket/9964#comment:51)中仍有一个开放的bug。
非常感谢任何见解。