Apache/MySQL 上的 Django 内存泄漏
Posted
技术标签:
【中文标题】Apache/MySQL 上的 Django 内存泄漏【英文标题】:Django memory leak on Apache/MySQL 【发布时间】:2012-01-06 11:32:38 【问题描述】:我有一个 Satchmo 部署,其中运行 50 万个产品
Apache 2.2-mpm-prefork mysql 5.1 mod_wsgi 3.3 mysqldb 1.2.3抛开技术堆栈(随着时间的推移将迁移到 nginx / gunicorn / etc...) 这个网站有一个地狱般的内存泄漏
服务器本身正在运行 16GB 内存,随着时间的推移,它都被 apache 进程消耗掉了
调试已关闭
缓存正在通过 MySQL 运行
我已经用谷歌搜索和试验了几天,除了内存消耗变慢之外没有任何变化。
对追踪这个有什么建议吗?
我的下一步是对项目进行概要分析(考虑到 Satchmo 中的大量依赖项,我不喜欢这个想法),尽管我不认为问题出在项目本身,因为
-
我之前使用过 Satchmo,没有出现内存问题
这不会显示在我的开发机器上
【问题讨论】:
作为一个更新,我为 nginx/uwsgi 删除了 apache/mod_wsgi——虽然 MySQL 本身似乎仍然存在问题,但工作得更好 【参考方案1】:你是如何运行 mod_wsgi 的?嵌入式模式还是守护模式?除非您已正确设置 Apache,否则嵌入式模式和 prefork 是一个坏主意。阅读:
http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html
和
http://blog.dscpl.com.au/2009/11/save-on-memory-with-modwsgi-30.html
还要确保您没有仍在加载 mod_python。
并不是说内存使用的原因会跳出来,但是您可以尝试像 New Relic 这样的生产监控工具,它可以查看应用程序内部发生的情况。 Python 代理和服务器监控工具都可能有用,尤其是历史图表,因为它可以更好地指示随着时间的推移发生了什么。
免责声明:这些天我在 Python 代理上为 New Relic 工作。 :-)
【讨论】:
mod_python 从未安装在此服务器上 - mod_wsgi 正在以守护程序模式运行 - 我将给 New Relic 看看以上是关于Apache/MySQL 上的 Django 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu配置Django+ Apache2+ mysql
Heroku 上的 Celery、RabbitMQ 和 Django:达到内存限制
在 Django 中的大表上的内存效率(常量)和速度优化迭代
带有 uWSGI 的 Django 中 Geoip2() 上的“[Errno 12] 无法分配内存”