我已经尝试了一段时间来检测cherrypy的内存问题。对函数的任何 Web 调用都会使用我运行此命令时的内存:
ps -u djotjog -o pid,rss,command | awk '{print $0}{sum+=$2} END {print "Total", sum/1024, "MB"}'
似乎永远用完了。在退出之前,我试图“删除”函数中的每个对象。没有效果。我想知道存储大量数据的类实例是否可能是问题所在。我使用类似的东西:
class Data:
pass
ref_data = Data()
... do stuff... make a stories_dict ...
ref_data.stories = stories_dict #dictionary 'id':'story' pairs
del stories_dict
最后,我看到每次运行网络呼叫时仍然使用 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上的python cherrypy应用程序未释放内存
如果是,我如何在共享托管站点上配置该解决方案?