内存泄漏 - gunicorn + django + mysqldb

Evg*_*Evg 1 python django memory-leaks mysql-python gunicorn

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

当gunicorn工人超过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 
Run Code Online (Sandbox Code Playgroud)

因此,只有2 + 6 = 8 mb,而gunicorn工人超过300 mb.

所以我觉得问题不在python代码中,而是更深层次.

我有:gunicorn == 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
Run Code Online (Sandbox Code Playgroud)

它似乎在这里泄漏 - 09c91000 0 253204 253204 rw --- [anon]

但我不知道该怎么做.

如何解决此漏洞需要帮助?

Ion*_*lub 8

如果你认为这个问题是由gunicorn工人造成的,那么有一种简单的方法来检验这个假设:

使用参数启动工作程序 --max-requests *some positive number*

这将使gunicorn在服务器有多个请求之后重新启动每个worker.

他们在文档中说:This is a simple method to help limit the damage of memory leaks.