6

我的堆栈包括 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 中明确使用数据库。

我已经阅读了很多关于从 django 保持打开状态的数据库连接,但这一切似乎都来自大约 2 年前,当时 django 中仍然存在一个打开的错误(https://code.djangoproject.com/ticket/9964#comment: 51 )。

非常感谢任何见解。

4

0 回答 0