私はApache
+ mod_wsgi
+ Django
アプリを持っています。 mod_wsgi
はデーモンモードで実行されます。Pythonがメモリを解放しない理由(mod_wsgi + Djangoの下で)
私はDBから重要なクエリーセットを取り出し、さらにクエリーセットの結果を計算して配列を割り当てた後、この配列を返します。スレッドローカルストレージ、グローバル変数などを使用していません。
問題は、私のアプリは、比較的私はmod_wsgiをするために設定した数のスレッドにメモリを食べることです。
私は、mod_wsgiでさまざまなスレッド数を設定し、wsgiプロセスがメモリ上昇できるかどうかを確認しながらカールを表示してビューを打つことで、小さな実験を行いました。
それはこのように書きます:
1 thread - 256Mb 2 threads - 400Mb 3 threads - 535Mb 4 threads - 650Mb
したがって、各スレッドが上位メモリ使用量に120-140Mbについて追加。
私は、最初の要求に割り当てられた最初のメモリが決して解放されないようです。シングルスレッドシナリオでは、(同じビューへの)2番目の要求が到着したときに再利用されます。これで私は去ることができます。
しかし、私は複数のスレッドを使用すると、要求が以前にこの要求を実行していないスレッドによって処理されると、このスレッドは別の場所に140Mbを "保存"します。
- これはどのように修正できますか?
- 恐らくDjangoはTSLにいくつかのデータを保存します。それが の場合、どうすれば無効にできますか?
- また、回避策として、 は、特定のスレッドに要求実行をバインドすることが可能ですか?
mod_wsgi
?
ありがとうございます。
PS。 DEBUG
はFalseに設定されていますsettings.py
a)データセットが到着したときだけ配列を作成し、b)ガベージコレクタがそれに到達できるようにデータセットを終了したら削除しますか? –
a) - はい。 b) - 私はそれを明示的にdelしない。 JSONに変換してJSON文字列を返します。 –
もしあなたがそれをdelしないなら、それはまだ使用中です! –