Python 内存泄漏-gunicorn+;django+;mysqldb
我的gunicorn+django 1.5.1+mysqldb内存泄漏。 我开始用gc和objgraph探索我的代码 当gunicorn worker超过300mb时,我收集了一些数据: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
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
的内存泄漏问题。