2011-03-01 12 views
8

से पाइथन में सभी उपलब्ध टपल्स प्रिंट करें मुझे एहसास हुआ कि एक पायथन लिपि में मेमोरी लीक है। जो पहले 25 एमबी पहले कब्जा कर लिया था, और 15 दिनों के बाद यह 500 एमबी से अधिक है।एक डिबगर

मैं कई अलग अलग तरीकों का पालन किया है, और के रूप में एक अजगर नौसिखिया हूँ समस्या के मूल में प्राप्त करने में सक्षम नहीं ...

अंत में, मैं इस निम्नलिखित

objgraph.show_most_common_types(limit=20) 
tuple      37674 
function     9156 
dict      3935 
list      1646 
wrapper_descriptor   1468 
weakref     888 
builtin_function_or_method 874 
classobj     684 
method_descriptor   551 
type      533 
instance     483 
Kind      470 
getset_descriptor   404 
ImmNodeSet     362 
module      342 
IdentitySetMulti   333 
PartRow     331 
member_descriptor   264 
cell      185 
FontEntry     170 

मैं एक ब्रेक सेट मिला बिंदु, और प्रत्येक पुनरावृत्ति के बाद यह हो रहा है ...

objgraph.show_growth() 
tuple 37674  +10 

आगे बढ़ने का सबसे अच्छा तरीका क्या है? क्या इस 10 टपल हो जाता है जोड़ा हर मुझे कुछ सुराग दे देंगे -

(Pdb) c 
(Pdb) objgraph.show_growth() 
tuple 37684  +10 

मैं सभी tuples, और पार की जाँच बाहर मुद्रण अंदाज़ा लगाओ? कृपया मुझे बताएं कि यह कैसे करें ..

या इस मेमोरी रिसाव को खोजने का कोई अन्य तरीका है। मैं Python 2.4.3 का उपयोग कर रहा हूं, और कई अन्य उत्पाद निर्भरताओं के कारण - दुर्भाग्य से मैं अपग्रेड नहीं कर सकता/चाहिए।

उत्तर

2

क्या मैं सही ढंग से पढ़ रहा हूं कि एक ही स्क्रिप्ट 15 दिनों के लिए चल रही है?

ऐसी लंबी अवधि की प्रक्रियाओं के लिए आवधिक पुनरारंभ करना एक अच्छा अभ्यास है और सभी मेमोरी लीक को खत्म करने से करना बहुत आसान है।

अद्यतन: - प्रिंट सभी नए जोड़े गए ऑब्जेक्ट नहीं कचरा एकत्र किए गए थे this answer को देखो, यह आप वास्तव में क्या जरूरत है क्या लगता है।

0

मेरा पहला विचार यह है कि शायद आप स्क्रिप्ट में नई ऑब्जेक्ट्स बना रहे हैं और उन्हें किसी प्रकार की वैश्विक सूची में जमा कर रहे हैं। आपकी स्क्रिप्ट पर जाना आमतौर पर आसान होता है और यह सुनिश्चित कर लें कि आप कचरे को डीबग करने से पहले कोई लगातार डेटा नहीं बना रहे हैं। मुझे लगता है कि आप जिस उपयोगिता का उपयोग कर रहे हैं, objgraph, आपको कचरा ऑब्जेक्ट को संदर्भों की संख्या के साथ प्रिंट करने की अनुमति देता है। आप कोशिश कर सकते हैं।

+0

यह एक बहुत बड़ी लिपि (3 मॉड्यूल से अधिक) है, और पाइथन के लिए नया है इसलिए पूरी स्क्रिप्ट के माध्यम से भी पता लगाने में असमर्थ है। मैं अभी भी सभी tuples मुद्रित करने के लिए रास्ता तलाश रहा हूं या कम से कम प्रिंटिंग केवल वैश्विक tuples ... लेकिन अभी तक कोई भाग्य नहीं है! – user379997

संबंधित मुद्दे