Django和限制RAM使用:推荐的语法,约定和策略?

时间:2012-10-06 07:59:10

标签: python django linux apache ram

我的django项目是使用apache2托管的,最近一直在消耗大量的内存,我不确定是否有异常,或者是否在项目中系统地错误地完成了某些事情。

对于记录,debug被设置为False,内存泄漏被监视并且不存在,django queryset数据库已被清除,并且所有静态引用都托管在单独的静态应用程序上。

以下是具体的内存消耗:

2120 /home/path/apache2/bin/httpd.worker -f /home/path/apache2/conf/httpd.conf
46408 /home/path/apache2/bin/httpd.worker -f /home/path/apache2/conf/httpd.conf
47124  /home/path/apache2/bin/httpd.worker -f /home/path/apache2/conf/httpd.conf
4800 /home/path/apache2/bin/httpd.worker -f /home/path/apache2/conf/httpd.conf

误解和疑问:

实际上最终耗费内存和内存的成本是多少?一个queryset调用?定义一个视图?一切?我知道这是一个非常基本的问题,但我对服务器和Web应用程序如何交互只有一个抽象的理解。

对于工业项目,是:

Model.objects.all()

真的很糟糕?或者应该尽可能地过滤所有内容?

对于django项目来说,46408和47124的rss是否被认为是非常大的?或者我是否应该进一步关注优化RAM的使用?

我的项目中的每个视图都被至少三个SomeModel.objects.all()调用响应。这会严重损害性能,还是无关紧要?

由于

1 个答案:

答案 0 :(得分:1)

并非每个Model.objects.all()都会导致评估所有项目。 Django中的QuerySets是惰性评估的。如果你没有做像len(Model.objects.all())这样现在评估它的愚蠢的东西,你可能不会以这些评估结束。至少不总是 - 例如所有分页器限制查询集等。

我经历过的Django中最耗费RAM的事情之一是在管理中显示由数十万个可能的相关对象组成的选择框...(蚂蚁就是raw_id_fields可用的原因)。