当前位置:  开发笔记 > 编程语言 > 正文

减少Django内存使用量.低挂水果?

如何解决《减少Django内存使用量.低挂水果?》经验,为你挑选了4个好方法。

我的内存使用量随着时间的推移而增加,重新启动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对象大小和内存使用情况



1> nosklo..:

确保您没有保留对数据的全局引用.这可以防止python垃圾收集器释放内存.

不要用mod_python.它在apache中加载一个解释器.如果您需要使用apache,请mod_wsgi改用.切换并不棘手.这很容易.django比脑死亡mod_wsgi更容易配置mod_python.

如果你可以从你的要求中删除apache,那对你的记忆会更好.spawning似乎是运行python Web应用程序的新的快速可扩展方式.

编辑:我不知道如何切换到mod_wsgi可能是" 棘手的 ".这应该是一项非常容易的任务.请详细说明您使用开关时遇到的问题.


@Josh:如果你不使用apache-only功能,apache的膨胀和内存使用是愚蠢的.它只是一个不必要的层.
Django仍然赞同mod_python,因为mod_wsgi仍然相当新,他们想要保守.但是,如果您关注Django社区,您会看到人们切换到mod_wsgi.不久之后它就是推荐选项.

2> Van Gale..:

如果你正在运行的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开发者已经切换了.说真的,这是一个不用脑子:)



3> Pankrat..:

这些是我所知道的Python内存分析器解决方案(不是Django相关的):

Heapy

pysizer(已停产)

Python内存验证器(商业)

Pympler

免责声明:我与后者有利害关系.

单个项目的文档应该让您了解如何使用这些工具来分析Python应用程序的内存行为.

以下是一个很好的"战争故事",也提供了一些有用的指示:

减少python应用程序的占用空间



4> zgoda..:

另外,检查您是否使用任何已知的泄漏器.众所周知,MySQLdb会因为unicode处理中的错误而泄漏Django的大量内存.除此之外,Django调试工具栏可以帮助您跟踪生猪.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有