मेरे पास django में चल रही एक छोटी मल्टीथ्रेडेड स्क्रिप्ट है और समय के साथ अधिक से अधिक स्मृति का उपयोग शुरू होता है। इसे पूरे दिन छोड़ने के बारे में 6 जीबी रैम खाती है और मैं स्वैप करना शुरू कर देता हूं।पायथन: मेमोरी लीक डीबगिंग
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% * 8 जी == 4 जी रैम का इस्तेमाल किया जाता है।
(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
यह 4 जी तक नहीं है, और न ही मुझे ठीक करने के लिए कोई बड़ा डेटा संरचित किया गया है। यूनिकोड "किए गए" नोड्स के सेट() से है, और सूची की तरह यादृच्छिक weakref
एस है।
मैंने गप्पी का उपयोग नहीं किया क्योंकि इसे सी एक्सटेंशन की आवश्यकता थी और मेरे पास रूट नहीं था इसलिए इसे बनाने के लिए दर्द हो रहा था।
कोई भी ऑब्जेक्ट जिसका उपयोग मैं कर रहा था __del__
विधि है, और पुस्तकालयों के माध्यम से देख रहा है, यह django की तरह नहीं दिखता है और न ही पायथन-mysqldb या तो करता है। कोई अन्य विचार?
"Django में चल रहा है"? क्या आपका मतलब है कि आप अतिरिक्त गैर-वेब-सेवा पृष्ठभूमि प्रसंस्करण करने के लिए Django वेब सर्वर का उपयोग कर रहे हैं? क्या आपने इस गैर-वेब-सेवारत सामग्री को एक अलग प्रक्रिया में विभाजित करने पर विचार किया है? –
यह एक क्रॉन नौकरी है जो Django settgings.py आयात करता है और कई Django ORM सुविधाओं का उपयोग करता है। इसलिए, यह किसी वेबसर्वर द्वारा उत्पन्न नहीं होता है, लेकिन फिर भी कई सुविधाओं का उपयोग करता है (जो प्रासंगिक हो सकता है) –