6

私のスタックには、django (1.4.3)、psycopg2 (0.0.3)、および postgres (9.1) が含まれています。さらに、gunicorn と gevent でジャンゴを提供しているため、psycogreen.gevent.patch_psycopg を使用しています。

すべてが満足しているように見えますが、多くの (~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()

2 つの質問:

  1. これらの開いている接続はすべて問題ありませんか? 私には多くの無駄なメモリ使用のように見えます。
  2. これは gevent または psycogreen に関連していますか? グリーンレット内でデータベースを明示的に使用していません。

django から開いたままのデータベース接続について多くのことを読みましたが、それはすべて、django にまだ開いているバグがあった約 2 年前のもののようです ( https://code.djangoproject.com/ticket/9964#comment: 51)。

どんな洞察も大歓迎です。

4

0 に答える 0