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] 无法分配内存”

Ubuntu上的Mysql apache2 phpmyadmin

Flashdrive 上的 XAMPP 无法在 Windows 7 上启动 Apache、MySQL