Django每次请求内存使用量增加

35 投票
8 回答
19425 浏览
提问于 2025-04-15 19:27

我把我的第一个Django项目从DjangoEurope迁移到了Webfaction,结果出现了一个看起来像是内存泄漏的问题。每次请求时,服务器的内存使用量大约增加500KB,而且这个内存使用量不会下降。这样持续下去,直到Webfaction因为内存使用过多而强制关闭它。

我在浏览器中刷新Django的管理界面时,可以明显看到这个问题(虽然这个问题在每个页面上都会发生,不仅仅是管理界面——我觉得管理界面是个不错的测试案例,因为那里没有我直接写的代码)。每次浏览器重新加载时,内存使用量都会增加几百KB。

我使用Webfaction建议的命令来测试内存:

ps -u publica -o rss,etime,pid,command

关于我的设置:

  • Django 1.1(稳定版)
  • 使用Apache和mod_wsgi的默认Webfaction Django设置
  • DEBUG设置为False
  • 使用Webfaction的MySQLdb 1.2.2,但听说它有一些问题,所以我尝试了1.2.3c版本,但没有帮助。

编辑:我创建了一个空的Django项目——默认的Django配置加上django.contrib.admin和一个新的空数据库(尝试了mysql和postgresql)。我开始在浏览器中重新加载Django管理界面,并观察内存使用情况。起初我看到问题出现——每次重新加载后内存使用量增加。但随后它稳定下来,不再增长。这和我在Django Europe上原始项目的表现一致。不幸的是,在Webfaction上,它似乎从未稳定下来(或者至少在我账户的内存限制内没有稳定下来)。有什么建议吗?

8 个回答

1
2

我们在Webfaction上遇到过类似的问题,但最后发现根本不是他们的错。其实是Django里面有个bug,导致在使用包含很多元素的网站地图时,会消耗大量内存:http://code.djangoproject.com/ticket/11572

当我们把网站地图去掉后,内存使用量就不再一下子飙升到90Mb了。觉得这个问题值得提一下,因为我们花了很长时间才找到原因。

14

我很抱歉,我没有找到明确的答案。Graham Dumpleton给出的建议非常有帮助,但不幸的是,他没有写成正式的回答(只是一些评论),所以我无法接受他的回复。

虽然我还没有完全解决这个问题,但我可以给其他遇到类似问题的人一些基本的建议:

撰写回答