我的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
误解和问题:
什么东西最终会消耗内存和RAM?queryset调用?定义视图?每件事我知道这是一个非常初级的问题,但我对服务器和web应用程序如何交互只有抽象的理解。
对于工业项目,是:
Model.objects.all()
真的很糟糕吗?还是应该尽可能多地过滤所有内容?
对于django项目来说,46408和47124的rss是否被认为非常大?或者我应该不关心进一步优化RAM的使用吗?
我的项目中的每个视图都至少通过三个SomeModel.objects.all()调用进行响应。这会严重影响性能吗?还是无关紧要?
感谢
并非每个Model.objects.all()
都会评估所有项目。Django中的QuerySet是惰性求值的。如果你现在没有做像len(Model.objects.all())
这样的愚蠢的事情来评估它,你可能不会以这些评估结束。至少不总是这样——例如,所有分页器都限制查询集等等
在Django中,我经历过的最消耗RAM的事情之一是在管理员中显示由数十万个可能的相关对象组成的选择框。。。(这就是raw_id_fields
可用的原因)。