デバッグの2日後、私は自分のタイムホッグ、つまりPythonのガベージコレクタを打ち砕いた。
私のアプリケーションは、多くのオブジェクトをメモリに保持しています。それはうまくいく。
GCは通常のラウンドを実行します(私は(700、10、10)のデフォルトしきい値でプレイしていません)。
重要なトランザクションの途中で、第2世代スイープが始まり、〜1.5M世代の2つのオブジェクトを確認します。
これには2秒かかります! 名目上のトランザクションは0.1秒未満です。Django Pythonガベージコレクションの問題
私の質問は何ですか?
第2世代スイープをオフにすることができます(非常に高いスレッショルドを設定することで、これは正しいですか?)、GCは従順です。
いつ電源をオンにする必要がありますか?
Djangoを使用してWebサービスを実装し、各ユーザーのリクエストには約0.1秒かかります。
最適なのは、私はこれらのGC gen 2サイクルをユーザAPIリクエストの間に実行します。しかし、どうすればいいのですか?
私のビューはで終わり、AFTER gen 2 GCスイープを実行したいです。
どうすればよいですか?このアプローチは理にかなっていますか?
ガベージコレクションで不要なオブジェクトをマークすることができますので、GCは2Ginサイクルごとにテストしませんか?
Djangoサーバが比較的アイドル状態のときにGCをフルスウィープするように設定するにはどうすればよいですか?
複数のプラットフォーム(Windows/Linux)でのPython 2.6.6。
"私のアプリケーションには多くのオブジェクトがメモリに保持されています"どうやって? –
コンテナは標準の辞書です。オブジェクト自体は、自分自身のクラスインスタンス(オブジェクトから派生)またはタプルのいずれかであり、アイテムの1つは前記クラスインスタンスへの参照であり(残りのアイテムはintです)、 –
Django RequestおよびReplyオブジェクトは一時的なものなので、どのようにメモリに何かを保持できますか? –