Python 内存泄漏-gunicorn+;django+;mysqldb

Python 内存泄漏-gunicorn+;django+;mysqldb,python,django,memory-leaks,mysql-python,gunicorn,Python,Django,Memory Leaks,Mysql Python,Gunicorn,我的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_objec

我的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=8MB,而gunicorn worker超过300MB

所以我认为问题不在python代码中,而是更深层次的

我有: gunicorn==0.17.2 mysqldb==1.2.4

我通过pip安装将whem更新为19.0.0和1.2.5 但是pip frreze显示的是旧版本,而gunicorn-v和mysqldb.version\u信息显示的是上次更新的版本

因此,我认为如何全面重新安装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---[anon]

但我不知道该怎么办


需要关于如何修复此泄漏的一些方法的帮助吗?

如果您认为问题是由gunicorn工人引起的,那么有一种简单的方法来验证该假设:

使用参数
--max requests*一些正数*

这将使gunicorn在满足指定数量的请求后重新启动每个工作进程


他们说:
这是一种帮助限制内存泄漏损害的简单方法。

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