【问题标题】:memory leak - gunicorn + django + mysqldb内存泄漏 - gunicorn + django + mysqldb
【发布时间】:2014-08-09 17:39:55
【问题描述】:

我的 gunicorn + django 1.5.1 + mysqldb 中有内存泄漏。 我开始用 gc 和 objgraph 探索我的代码

当 gunicorn worker 超过 300mb 时,我收集了一些统计数据:

data['sum_leak'] = sum((getsizeof(o) for o in objgraph.get_leaking_objects()))  #2 mb
data['total_objects_length'] = sum((getsizeof(o) for o in gc.get_objects()))    #6 mb 

所以只有 2+6=8 mb,而 gunicorn worker 超过 300 mb。

所以我认为问题不在 python 代码中,它更深。

我有: 独角兽==0.17.2 mysqldb==1.2.4

我通过 pip install 将 whem 更新到 19.0.0 和 1.2.5 但是 pip frreze 显示旧版本,而 gunicorn -v 和 mysqldb.version_info 显示最后更新。

所以我认为如何完全重新安装 gunicorn 和 mysqldb 才能完全删除旧的(可能是一些旧的雏形会造成问题)?

我还通过 pmap 获得了一些信息:

pmap -x 805
805:   /usr/bin/python /usr/local/bin/gunicorn engine.wsgi:application -b 127.0.0.1:9005 --workers=2
Address   Kbytes     RSS   Dirty Mode   Mapping
08048000       0    1444       0 r-x--  python2.7
0829e000       0       4       4 r----  python2.7
0829f000       0     204     120 rw---  python2.7
082f4000       0      44      44 rw---    [ anon ]
09947000       0    3360    3360 rw---    [ anon ]
09c91000       0  253204  253204 rw---    [ anon ]
b5500000       0       4       4 rw---    [ anon ]
b5521000       0       0       0 -----    [ anon ]
b56d5000       0       0       0 -----    [ anon ]
b56d6000       0    1552    1552 rw---    [ anon ]
b6257000       0      12       0 r-x--  libpcre.so.3.12.1

这里似乎有泄漏 - 09c91000 0 253204 253204 rw--- [匿名]

但我不知道该怎么处理。

需要有关如何修复此泄漏的帮助?

【问题讨论】:

  • 你的 Django 设置中有 DEBUG=True 吗?这通常是内存泄漏的原因。
  • 我有 DEBUG=False,使用 sum((getsizeof(o) for o in gc.get_objects())) 收集的所有 python 对象在泄漏期间只有 8 mb (3000mb),所以我认为有问题不在python代码中
  • 你用的是什么游标类?我在使用SSDictCursor 时遇到了MySQLdb 的内存泄漏。

标签: python django memory-leaks mysql-python gunicorn


【解决方案1】:

如果您认为问题是由 gunicorn 工人引起的,有一个简单的方法来检验假设:

使用参数--max-requests *some positive number*启动worker

这将使 gunicorn 在完成指定数量的请求后重新启动每个工作人员。

documentation 他们说:This is a simple method to help limit the damage of memory leaks.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多