저는 장고에서 실행되는 작은 멀티 스레드 스크립트를 가지고 있으며 점점 더 많은 메모리를 사용하기 시작합니다. 하루 종일 놔두면 약 6GB의 RAM을 먹어서 교환을 시작합니다.파이썬 : 메모리 누수 디버깅
는 http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks에 따라 내가 (사용 된 메모리의 800M와) 가장 일반적인 유형으로 이것을 참조 :
(Pdb) objgraph.show_most_common_types(limit=20)
dict 43065
tuple 28274
function 7335
list 6157
NavigableString 3479
instance 2454
cell 1256
weakref 974
wrapper_descriptor 836
builtin_function_or_method 766
type 742
getset_descriptor 562
module 423
method_descriptor 373
classobj 256
instancemethod 255
member_descriptor 218
property 185
Comment 183
__proxy__ 155
이상한 아무것도 표시되지 않습니다. 메모리 문제를 디버그하는 데 도움이되도록 지금해야 할 일은 무엇입니까?
업데이트 : 사람들이 추천하는 몇 가지 시도. 나는 밤새 프로그램을 운영했고, 내가 일하면 50 % * 8G == 4G RAM을 사용했다.
(Pdb) from pympler import muppy
(Pdb) muppy.print_summary()
types | # objects | total size
========================================== | =========== | ============
unicode | 210997 | 97.64 MB
list | 1547 | 88.29 MB
dict | 41630 | 13.21 MB
set | 50 | 8.02 MB
str | 109360 | 7.11 MB
tuple | 27898 | 2.29 MB
code | 6907 | 1.16 MB
type | 760 | 653.12 KB
weakref | 1014 | 87.14 KB
int | 3552 | 83.25 KB
function (__wrapper__) | 702 | 82.27 KB
wrapper_descriptor | 998 | 77.97 KB
cell | 1357 | 74.21 KB
<class 'pympler.asizeof.asizeof._Claskey | 1113 | 69.56 KB
function (__init__) | 574 | 67.27 KB
이는 4G에 합산되지 않으며, 실제로 큰 데이터가 수정되도록 구성되지 않습니다. 유니 코드는 "완료"노드의 집합()에서 가져온 것이고 목록의 모양은 임의로 weakref
과 같습니다.
저는 G extension을 필요로했기 때문에 guppy를 사용하지 않았고 root를 가지고 있지 않았기 때문에 빌드하는 데 어려움이있었습니다.
내가 사용하고있는 object 중 __del__
메소드를 가지고 있지 않으며 라이브러리를 살펴보면 django 나 python-mysqldb처럼 보이지 않습니다. 다른 아이디어?
"장고에서 실행 중"? 비 웹 서비스 백그라운드 처리를 수행하기 위해 장고 웹 서버를 사용하고 있다는 것을 의미합니까? 이 웹 이외의 것들을 별도의 프로세스로 분리하는 것을 고려 했습니까? –
Django settgings.py를 가져오고 장고 ORM 기능을 많이 사용하는 cron 작업입니다. 그래서, 그것은 웹 서버에 의해 산란되지는 않지만 여전히 관련이있을 수있는 많은 기능을 사용합니다 –