2010-02-19 145 views
24

我将我的第一个Django项目从DjangoEurope移到Webfaction,这开始了一个看起来像内存泄漏的问题。随着服务器进程的每次请求内存使用量增加大约500kb。它永远不会停止。这一直持续到Webfaction因为使用太多的内存而杀死它。Django的内存使用量随着每个请求而上涨

当我在浏览器中刷新Django的管理界面时,我可以清楚地看到这一点(尽管每个页面都会发生这种情况,但不仅仅是管理界面 - 我虽然管理界面会是一个很好的测试用例,因为没有我代码直接在那里)。随着每个浏览器重新加载内存使用量上升几百千字节。

I测试使用由Webfaction建议的命令的存储器:

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

进一步了解我的设置:

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

编辑:我创建了一个空的Django项目 - Django缺省的配置加上django.contrib.admin和新鲜的空数据库(都与MySQL和PostgreSQL试过)。我开始在浏览器中重新加载Django admin,并观看内存使用情况。起初我看到问题的发生 - 内存使用量在每次重新加载后都会增加。但随后稳定并停止增长。这与我的原始项目在Django Europe上的表现一致。不幸的是,在Webfaction中,它似乎永远不会稳定(或者至少不在我的账户可用的内存限制内)。有什么建议?

+0

如果你在模型中做了一些漏洞,它肯定会显示在管理员中,所以我不确定你是否已经将你的代码视为罪魁祸首。对于它的价值,我已经在Webfaction上运行了一年多的Django应用程序,并没有像这样的问题。 – 2010-02-19 05:36:59

回答

12

恐怕我没有得到任何明确的答案。 Graham Dumpleton的提示最有帮助,但不幸的是他没有做出答案(只是评论),所以没有办法接受他的回应。

虽然我还没有完全解决这个问题,这里有遇到类似问题的其他人的一些基本技巧:

+0

链接到webfaction的帖子坏了 – Olli 2012-11-20 08:58:50

+1

@Olli谢谢。我更新(并扩展)了Webfaction的链接。 – 2012-11-20 16:33:00

1

我有与webfaction相同的问题。

我使用的方法以及webfaction告诉我应该继续使用的方法是运行一个cron作业,每5分钟检查一次内存,然后重新启动任何失控的应用程序。

在webfaction上的4个python应用程序中,我平均每天重新启动4次。

+0

这很糟糕。在DjangoEurope上一切正常。必须有一个真正的解决方案... – 2010-02-19 10:20:34

+2

如果他们建议用户手动重新启动活动进程,听起来像是他们的环境有问题。 – jathanism 2010-02-19 15:11:59

0

我在Webfaction上也遇到了内存问题 - 直到我添加了第五个应用程序后,他们才真正地出现问题。我尝试了一些对我的apache配置的调整,但最终对我的工作只是切换到mod_wsgi。

+0

我已经使用mod_wsgi :( – 2010-02-19 12:52:46

+2

但是你是否使用mod_wsgi的守护进程模式,或者你是否尝试在mod_wsgi的嵌入模式下运行一切?即使使用WebFaction配置将Apache服务器子进程保持为2,如果使用嵌入模式仍然会更多的内存比守护进程模式Django实例的一个进程 – 2010-02-21 05:09:32

+0

@Graham - 谢谢。我将mod_wsgi升级到了3.1(从webfaction提供的2.5开始),这似乎有点帮助(我第一次看到实际使用内存的实例然后我切换到一个守护进程模式,但没有注意到太多的区别,我感到有点被配置选项吓倒了,我把我的'ServerLimit'设置为“2”,'MaxRequestsPerChild'设置为“ 500“,'WSGIDaemonProcess'到[[mydomain] processes = 2 inactivity-timeout = 1800 threads = 15]和'WSGIRestrictEmbedded'开启。这个配置是否有意义? – 2010-02-21 13:30:38

0
+0

我确实从分析这些提示开始。我确实按照建议的方式提供静态文件(我在过去两天至少检查了五次;))。我不知道剧本。谢谢。 – 2010-02-19 18:34:10

+0

如果您只运行一个应用程序,则很容易避免出现问题。无论如何,我认为他们实际上每隔一段时间都会重新启动您的应用程序。但是当你在一个账户中获得四个应用时,开始达到你的极限非常容易 - 特别是当网络传输对内存吝啬时,并且不会让你为每个账户购买超过240 MB的内容。 – 2010-02-21 02:01:09

+0

嗯..不知道webfaction是限制你可以购买的内存......谢谢。 – 2010-02-24 19:24:38

0

mod_python和mod_wsgi模块都加载到Apache?

我知道mod_wsgi不喜欢在它的building中有mod_python。检查它没有加载。

+1

可以一起使用mod_python和mod_wsgi,这不是说mod_wsgi不喜欢它。你只是放弃mod_wsgi的一些配置选项,因为mod_python负责初始化Python,而不是mod_wsgi。另外,即使在Apache中启用了mod_python,也没有使用内存泄漏。如果大量Apache重新启动并且不是每个请求都会发生,那么内存泄漏只会成为问题。 – 2010-02-26 11:03:52

1

检查进程内存缓存后端是否启用,如果是,可能是问题(每个请求的新缓存条目)。

+0

不是。我现在使用memcached(它使用它自己的进程,它可以单独增长),但关闭缓存不会缓存任何内容。 – 2010-02-28 10:12:17

2

我们对Webfaction类似的问题,但事实证明这不是因为它们在所有。 Django在使用带有大量元素的站点地图时存在高内存使用情况中的错误:http://code.djangoproject.com/ticket/11572

当我们移除站点地图时,它不再在当时拍摄90 Mb。只是觉得我应该提到它,因为它需要很长时间才能用于排除故障。

相关问题