我的内存使用量随着时间的推移而增加,重新启动Django并不适合用户.
我不确定如何分析内存使用情况,但有关如何开始测量的一些提示将非常有用.
我有一种感觉,有一些简单的步骤可以产生巨大的收益.确保'debug'设置为'False'是一个显而易见的问题.
谁能建议其他人?在低流量网站上缓存多少改进?
在这种情况下,我使用mod_python在Apache 2.x下运行.我听说mod_wsgi有点精简但在这个阶段转换会很棘手,除非我知道收益会很大.
编辑:感谢您的提示到目前为止.有关如何发现内存消耗的建议吗?是否有任何Python内存分析指南?
另外如上所述,有一些事情会让切换到mod_wsgi变得棘手,所以我想知道在向这个方向前进之前我可以期待的收益.
编辑: Carl在这里发布了一个稍微更详细的回复,值得一读:Django部署:削减Apache的开销
编辑: Graham Dumpleton的文章是我在MPM和mod_wsgi相关的东西上发现的最好的文章.我很失望,没有人可以提供有关调试应用程序本身的内存使用情况的任何信息.
最终编辑:我一直在与Webfaction讨论这个问题,看看他们是否可以协助重新编译Apache,这是他们在这个问题上的说法:
"我真的不认为你会通过切换到MPM Worker + mod_wsgi设置获得很多好处.我估计你可以节省大约20MB,但可能没有多少."
所以!这让我回到原来的问题(我仍然不是明智的).如何确定问题所在?这是一个众所周知的格言,如果不进行测试就无法优化,看看你需要优化的地方,但是关于测量Python内存使用量的教程很少,而且根本没有针对Django的内容.
感谢大家的帮助,但我认为这个问题仍然存在!
另一个最终编辑;-)
我在django-users列表中询问了这个问题,得到了一些非常有帮助的回复
老实说,有史以来最后一次更新!
这刚刚发布.可能是最好的解决方案:使用Pympler分析Django对象大小和内存使用情况
确保您没有保留对数据的全局引用.这可以防止python垃圾收集器释放内存.
不要用mod_python
.它在apache中加载一个解释器.如果您需要使用apache,请mod_wsgi
改用.切换并不棘手.这很容易.django比脑死亡mod_wsgi
更容易配置mod_python
.
如果你可以从你的要求中删除apache,那对你的记忆会更好.spawning
似乎是运行python Web应用程序的新的快速可扩展方式.
编辑:我不知道如何切换到mod_wsgi可能是" 棘手的 ".这应该是一项非常容易的任务.请详细说明您使用开关时遇到的问题.
如果你正在运行的mod_wsgi,大概产卵因为它是WSGI兼容,你可以用推土机来看看你的内存使用情况.
在mod_wsgi下,只需在WSGI脚本的底部添加:
from dozer import Dozer application = Dozer(application)
然后将浏览器指向http:// domain/_dozer/index以查看所有内存分配的列表.
我还要添加我对mod_wsgi的支持声音.与mod_python相比,它在性能和内存使用方面与众不同.格雷厄姆邓普尔顿对mod_wsgi的支持是出色的,无论是在积极发展方面,并在帮助邮件列表上的人来优化他们的安装.戴维·克拉默在curse.com发布了一些图表(我似乎无法找到现在不幸)显示CPU和内存使用率急剧减少后,便切换到mod_wsgi的对高流量的网站.几个django开发者已经切换了.说真的,这是一个不用脑子:)
这些是我所知道的Python内存分析器解决方案(不是Django相关的):
Heapy
pysizer(已停产)
Python内存验证器(商业)
Pympler
免责声明:我与后者有利害关系.
单个项目的文档应该让您了解如何使用这些工具来分析Python应用程序的内存行为.
以下是一个很好的"战争故事",也提供了一些有用的指示:
减少python应用程序的占用空间
另外,检查您是否使用任何已知的泄漏器.众所周知,MySQLdb会因为unicode处理中的错误而泄漏Django的大量内存.除此之外,Django调试工具栏可以帮助您跟踪生猪.