我将我的第一个Django项目从DjangoEurope转移到Webfaction,这开始出现一个看起来像内存泄漏的问题 . 随着每个请求服务器进程的内存使用量增加约500kb . 它永远不会失败 . 这种情况一直持续到Webfaction因使用太多内存而导致死亡 .
当我在浏览器中刷新Django的管理界面时,我可以清楚地看到这一点(虽然每个页面都会发生这种情况,不仅仅是管理界面 - 我虽然管理界面会是一个不错的测试用例,因为那里没有我的代码) . 随着每个浏览器重新加载,内存使用量增加几百千字节 .
我使用Webfaction建议的命令测试内存:
ps -u publica -o rss,etime,pid,command
More about my setup:
-
Django 1.1(稳定)
-
使用Apache和mod_wsgi设置默认Webfaction Django
-
DEBUG
设为False
-
来自Webfaction的MySQLdb 1.2.2,但在听到它有一些问题之后我尝试了1.2.3c版本 . 没有帮助 .
Edit: 我创建了一个空的Django项目 - 默认的Django配置加上 django.contrib.admin
和新的空数据库(同时尝试使用mysql和postgresql) . 我开始在浏览器中重新加载Django管理员并观察内存使用情况 . 起初我看到了问题 - 每次重新加载后内存使用量都会增加 . 但随后它稳定下来并停止增长 . 这与我的原始项目在Django Europe上的表现一致 . 不幸的是,在Webfaction上它似乎永远不会稳定(或者至少不在我帐户可用的内存限制内) . 有什么建议?
8 回答
我恐怕没有明确的答案 . Graham Dumpleton的提示最有帮助,但不幸的是他没有回答(只是评论),所以没有办法接受他的回答 .
虽然我还没有完全解决这个问题,但以下是其他有类似问题的人的基本提示:
阅读Webfaction的文档:
Reducing Memory Usage in general
Reducing mod_wsgi Memory Consumption
Reducing Django Memory Consumption
确保
DEBUG
设置设为False
不要使用
mod_python
,请使用mod_wsgi
确保使用最新版本的od
mod_wsgi
(Webfaction倾向于安装旧版本)Don't use Django to serve static content
尝试在守护进程模式下运行
mod_wsgi
(Webfaction默认情况下以嵌入模式安装)[感谢Graham Dumpleton提示]如果在嵌入模式下运行,则可以指定"inactivity-timeout=[seconds]"选项 . 它将在[秒]不活动后重新启动进程,从而有助于增加内存使用量 . Read this forum post for detailed instructions .
This script将帮助您更轻松,更准确地监控您的内存使用情况[感谢ClaudioA的提示]
我们在Webfaction上遇到了类似的问题,但事实证明,当使用包含大量元素的站点 Map 时,Django中存在一个关于高内存使用率的错误:http://code.djangoproject.com/ticket/11572
当我们删除站点 Map 时,它不再会在当时达到90 Mb . 我想应该提一下,因为它需要很长时间才能排除故障 .
我对webfaction也有同样的问题 .
我使用的方法,以及哪个webfaction告诉我应该继续使用,运行一个cron作业,每5分钟左右检查一次内存,并重新启动任何失控的应用程序 .
在webfaction的4个python应用程序中,我平均每天重启4次 .
我建议不要猜 .
看一下http://code.google.com/p/django-dowser/,它是一个非常有用的应用程序,用于检测内存泄漏并确定代码的哪些部分负责内存消耗 .
检查进程内存缓存后端是否已启用,如果是,则可能是问题(每个请求的新缓存条目) .
我在Webfaction上也有内存问题 - 直到我添加了我的第五个应用程序之后它们才真正出现 . 我试着对我的apache配置进行一些调整,但最终对我有用的只是切换到mod_wsgi .
mod_python和mod_wsgi模块都加载到apache中吗?
我知道mod_wsgi不喜欢在它的建筑物中使用mod_python . 检查未加载 .
你看过这些小贴士了吗? - > http://blog.webfaction.com/tips-to-keep-your-django-mod-python-memory-usage-down
我们在WebFaction中部署了一个应用程序,但我们没有遇到这些问题 .
您是否按照他们的建议提供静态文件?
BTW这也很有用:http://fightingrabbits.com/archives/198