私はしばらくの間、cherrypyのメモリの問題を検出しようとしました。関数へのWeb呼び出しはすべて、次のコマンドを実行すると次のようなメモリを使用します。
ps -u djotjog -o pid,rss,command | awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
永久に使い果たされたままのようです。終了する前に、関数内のすべてのオブジェクトを「del」しようとしました。無効。大量のデータを格納するクラスインスタンスが問題になるのではないかと思っていました。私は次のようなものを使用します:
class Data:
pass
ref_data = Data()
... do stuff... make a stories_dict ...
ref_data.stories = stories_dict #dictionary 'id':'story' pairs
del stories_dict
結局、Web呼び出しを実行するたびに350MBがまだ使用されていることがわかり、500MBに達すると、別のcherrypyインスタンスが生成されるようです。
PID RSS COMMAND
10492 960 ps -u globamh1 -o pid,rss,command
10493 784 awk {print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}
29833 1708 -bash
Total 3.37109 MB
後で...
PID RSS COMMAND
12811 1164 /bin/sh cherryd.fcgi
12817 293788 /home4/globamh1/python-2.7.2/bin/python2.7 /home4/globamh1/.local/bin/cherryd -P modules -c cherryd.conf -f -i app
13195 984 ps -u globamh1 -o pid,rss,command
13196 16 awk {print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}
29833 1708 -bash
Total 308 MB
後でまだ...
PID RSS COMMAND
4053 5216 /home/globamh1/python-2.7.2/bin/python /home/globamh1/python- 2.7.2/ngo_prompter_2.py
4091 988 ps -u globamh1 -o pid,rss,command
4092 784 awk {print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}
12817 1111616 /home4/globamh1/python-2.7.2/bin/python2.7 /home4/globamh1/.local/bin/cherryd -P modules -c cherryd.conf -f -i app
29833 1716 -bash
32413 1168 /bin/sh cherryd.fcgi
32414 576792 /home4/globamh1/python-2.7.2/bin/python2.7 /home4/globamh1/.local/bin/cherryd -P modules -c cherryd.conf -f -i app
Total 1658.48 MB
したがって、これをいくつかの特定の質問にまとめます。
- Pythonのガベージコレクターはどのくらいの速さで動作する必要がありますか?
- CherrypyまたはApacheは、データを永続的に保つために何か奇妙なことをしますか?
- 大量のメモリを使用している場合、cherrypyが複数のリクエストに応答することをどのように信頼できますか?いくつかのリクエストを無視していることはすでにわかりました。
- これはサーバー構成の問題ですか?
これは同じ問題ですか? Linux上のpythoncherrypyアプリケーションによって解放されないメモリ
はいの場合、共有ホスティングサイトでそのソリューションを構成するにはどうすればよいですか?