2010-02-19 15 views
24

मैंने अपनी पहली Django परियोजना DjangoEurope से Webfaction तक ले जाया, और इसने मेमोरी रिसाव की तरह एक मुद्दा शुरू किया। सर्वर अनुरोध की हर एक अनुरोध स्मृति उपयोग के बारे में 500kb ऊपर जाता है। यह कभी नीचे नहीं जाता है। यह तब तक चलता है जब तक वेबफैक्शन इसे बहुत अधिक स्मृति का उपयोग करने के लिए मारता है।Django स्मृति उपयोग प्रत्येक अनुरोध के साथ बढ़ रहा है

जब मैं अपने ब्राउज़र में Django के व्यवस्थापक इंटरफ़ेस को रीफ्रेश करता हूं तो मैं इसे स्पष्ट रूप से देख सकता हूं (हालांकि यह केवल एक ही पृष्ठ के साथ होता है, न केवल व्यवस्थापक इंटरफ़ेस के साथ - हालांकि मैं व्यवस्थापक इंटरफ़ेस एक अच्छा परीक्षण केस होगा, क्योंकि मेरे पास कोई नहीं है सीधे वहां कोड)। प्रत्येक ब्राउज़र को फिर से लोड करने के साथ मेमोरी उपयोग जोड़े सैकड़ों किलोबाइट्स चला जाता है।

मैं एक कमांड Webfaction ने सुझाव दिया का उपयोग कर स्मृति का परीक्षण:

ps -u publica -o rss,etime,pid,command 

मेरी स्थापना के बारे में अधिक:

  • Django अपाचे 1.1 (स्थिर)
  • डिफ़ॉल्ट Webfaction Django सेटअप का उपयोग और mod_wsgi
  • DEBUGFalse
  • 0 पर सेट किया गया
  • वेबफैक्शन से MySQLdb 1.2.2, लेकिन सुनने के बाद इसमें कुछ समस्याएं थीं, मैंने संस्करण 1.2.3 सी की कोशिश की। मदद नहीं की

संपादित करें: - डिफ़ॉल्ट Django विन्यास प्लस django.contrib.admin और ताजा खाली डेटाबेस (दोनों mysql और PostgreSQL के साथ की कोशिश की) मैं एक खाली Django प्रोजेक्ट बनाया। मैंने अपने ब्राउज़र में Django व्यवस्थापक को पुनः लोड करना शुरू किया और मेमोरी उपयोग देखा। सबसे पहले मैंने देखा कि समस्या - प्रत्येक रीलोड के बाद स्मृति उपयोग बढ़ गया। लेकिन फिर यह स्थिर हो गया और बढ़ने बंद कर दिया। यह मेरी मूल परियोजना Django यूरोप पर कैसे व्यवहार किया के साथ संगत है। दुर्भाग्यवश वेबफैक्शन पर यह स्थिर नहीं होता है (या कम से कम मेरे खाते में उपलब्ध स्मृति की सीमाओं के भीतर नहीं)। कोई सलाह?

+0

यदि आप अपने मॉडल में कुछ रिसाव कर रहे हैं तो यह निश्चित रूप से व्यवस्थापक में दिखाई देगा, इसलिए मुझे यकीन नहीं है कि आपने अपराधी के रूप में अपना कोड समाप्त कर दिया है।इसके लायक होने के लिए, मैं एक साल से अधिक के लिए वेबफैक्शन पर एक Django एप्लिकेशन चला रहा हूं और इस तरह कोई समस्या नहीं है। –

उत्तर

12

मुझे डर है कि मुझे कोई निश्चित उत्तर नहीं मिला है। ग्राहम डम्प्लटन की युक्तियां सबसे सहायक थीं, लेकिन दुर्भाग्य से उन्होंने कोई जवाब नहीं दिया (केवल टिप्पणियां), इसलिए उनकी प्रतिक्रिया स्वीकार करने का कोई तरीका नहीं है।

हालांकि मैं अभी भी पूरी तरह समस्या हल नहीं हो, यहाँ अन्य लोगों को इसी तरह की समस्याओं होने के लिए कुछ बुनियादी सुझाव हैं:

  • पढ़ें Webfaction के प्रलेखन:
  • यकीन DEBUG सेटिंग mod_python का उपयोग न करें, का उपयोग mod_wsgi
  • आप सबसे हाल के संस्करण आयुध डिपो mod_wsgi
  • Don't use Django to serve static content
  • (Webfaction पुराने संस्करणों स्थापित करने के लिए जाता है) का उपयोग सुनिश्चित करें False
  • पर सेट है डेमॉन मोड में mod_wsgi चलाने का प्रयास करें (वेबफैक्शन इसे डिफ़ॉल्ट रूप से एम्बेडेड मोड में इंस्टॉल करता है) [धन्यवाद ग्राहम डम्प्लटन टिप के लिए]
  • यदि आप एम्बेडेड मोड में चलाते हैं, तो आप "निष्क्रियता-समय-समय = [सेकंड निर्दिष्ट कर सकते हैं एस] "विकल्प। यह निष्क्रियता के [सेकंड] के बाद प्रक्रिया को पुनरारंभ करेगा, जिससे स्मृति उपयोग में वृद्धि होगी। Read this forum post for detailed instructions
  • This script आप अपनी स्मृति के उपयोग पर नजर रखने के लिए आसान करने में मदद करेगा, और अधिक सटीक [धन्यवाद ClaudioA टिप के लिए]
+0

वेबफैक्शन की पोस्ट से लिंक टूटा हुआ है – Olli

+1

@ ओली धन्यवाद। मैंने वेबफैक्शन के लिंक अपडेट (और विस्तारित) किए। –

1

मुझे वेबफैक्शन के साथ समान समस्याएं हैं I

जिस विधि का मैं उपयोग करता हूं, और किस वेबफैक्शन ने मुझे बताया है, मुझे उपयोग करना चाहिए, एक क्रॉन नौकरी चलाएं जो हर 5 मिनट या तो स्मृति को जांचती है, और नियंत्रण से बाहर होने वाले किसी भी ऐप्स को पुनरारंभ करती है।

webfaction पर 4 अजगर क्षुधा में से, मैं प्रति दिन 4 पुनरारंभ औसत निकालते हैं।

+0

वह बेकार है। DjangoEurope पर सब कुछ ठीक काम किया। एक असली समाधान होना चाहिए ... –

+2

अपने पर्यावरण के साथ कुछ संदिग्ध लगता है अगर वे उपयोगकर्ताओं को सक्रिय प्रक्रियाओं को मैन्युअल रूप से पुनरारंभ करने की सलाह दे रहे हैं। – jathanism

0

मैं बहुत Webfaction पर स्मृति के साथ मुद्दों लिया है - वे वास्तव में पैदा नहीं किया था जब तक मैं अपने पांचवें आवेदन हालांकि गयी। मैं अपने अपाचे कॉन्फ़िगरेशन को कुछ बदलाव करने की कोशिश की है, लेकिन क्या अंत में मेरे लिए काम किया बस mod_wsgi पर स्विच किया गया था।

+0

मैं पहले से mod_wsgi का उपयोग करता हूं :( –

+2

लेकिन क्या आप mod_wsgi के डिमन मोड का उपयोग कर रहे हैं, या आप mod_wsgi के एम्बेडेड मोड में सबकुछ चलाने की कोशिश कर रहे हैं? यहां तक ​​कि एम्बेडेड मोड का उपयोग करते हुए अपाचे सर्वर बच्चे की प्रक्रियाओं को 2 तक रखने के लिए वेबफैक्शन कॉन्फ़िगरेशन के साथ भी, अभी भी ले जाएगा Django उदाहरण के लिए एक प्रक्रिया के साथ डेमॉन मोड की तुलना में अधिक मेमोरी। –

+0

@ ग्राहम - धन्यवाद। मैंने mod_wsgi को 3.1 (वेबफैक्शन द्वारा प्रदान किए गए 2.5 से) अपग्रेड किया और यह थोड़ा सा मदद करने लग रहा था (पहली बार मैंने स्मृति उपयोग के उदाहरणों को देखा थोड़ा सा नीचे)। फिर मैंने एक डेमॉन मोड में स्विच किया, लेकिन बहुत अंतर नहीं देखा है। मुझे कॉन्फ़िगरेशन विकल्पों से थोड़ा डरा लगता है। मुझे अपना 'सर्वरलिमिट' सेट "2", 'MaxRequestsPerChild' "पर" 500 "," WSGIDaemonProcess' "[mydomain] प्रक्रियाओं = 2 निष्क्रियता-टाइमआउट = 1800 धागे = 15" और 'WSGIRestrictEmbedded' चालू है। क्या यह कॉन्फ़िगरेशन समझ में आता है? –

0
  • क्या आपने इन युक्तियों की जांच की? -> http://blog.webfaction.com/tips-to-keep-your-django-mod-python-memory-usage-down

  • हम WebFaction में कोई एप्लिकेशन को तैनात है और हम उन मुद्दों कर नहीं कर रहे हैं।

  • आप उनके द्वारा सुझाए गए के रूप में अपने स्टैटिक फ़ाइलें की सेवा कर रहे हैं?

  • BTW यह भी उपयोगी हो सकता है: http://fightingrabbits.com/archives/198

+0

मैंने सावधानीपूर्वक उन युक्तियों का विश्लेषण करके शुरू किया था। मैं स्थिर फाइलों की सेवा करता हूं जिस तरह से इसकी सिफारिश की जाती है (मैंने पिछले दो दिनों के दौरान कम से कम पांच बार जांच की है;])। मुझे लिपि के बारे में पता नहीं था। धन्यवाद। –

+0

यदि आपके पास अभी एक एप्लिकेशन चल रहा है, तो समस्याओं से बचने के लिए यह बहुत आसान है। मुझे लगता है कि वे वास्तव में वैसे भी हर बार अपने ऐप को पुनरारंभ करते हैं। लेकिन जब आपको एक ही खाते में चार ऐप्स मिलते हैं, तो अपनी सीमा को मारना शुरू करना बहुत आसान होता है - खासकर जब वेबफैक्शन मेमोरी के साथ चिपक जाता है, और आपको 240 एमबी या उससे अधिक खाते खरीदने की सुविधा नहीं देगा। –

+0

एमएम .. यह नहीं पता था कि वेबफैक्शन उस स्मृति को सीमित कर रहा था जिसे आप खरीद सकते हैं ... धन्यवाद। –

1

मुझे लगता है कि करने के लिए नहीं सुझाव देना चाहेंगे।

http://code.google.com/p/django-dowser/ पर एक नज़र डालें, यह मेमोरी लीक का पता लगाने और स्मृति के उपभोग के लिए आपके कोड के कौन से हिस्से जिम्मेदार हैं, यह पता लगाने के लिए एक बहुत ही उपयोगी ऐप है।

0

क्या दोनों mod_python और mod_wsgi मॉड्यूल अपाचे में लोड हो गए हैं?

मुझे पता है कि mod_wsgi को इसकी इमारत में mod_python पसंद नहीं है। इसे लोड न करें जांचें।

+1

कोई mod_python और mod_wsgi को ठीक से उपयोग कर सकता है, ऐसा नहीं है कि mod_wsgi इसे पसंद नहीं करता है। आप mod_wsgi के लिए बस कुछ कॉन्फ़िगरेशन विकल्प खोले हैं क्योंकि mod_python पायथन शुरू करने के लिए ज़िम्मेदार है, mod_wsgi नहीं। इसके अलावा, mod_python में अपाचे में सक्षम होने पर भी स्मृति रिसाव है लेकिन इसका उपयोग नहीं किया गया है। यह मेमोरी रिसाव केवल एक मुद्दा बन जाता है अगर अपाचे के बहुत से प्रयास करते हैं और यह हर अनुरोध पर कुछ नहीं होता है। –

1

जांचें कि क्या इन-प्रोसेस मेमोरी कैश बैकएंड सक्षम है, यदि हां, तो यह समस्या हो सकती है (प्रत्येक अनुरोध पर नई कैश प्रविष्टियां)।

+0

यह नहीं है। मैं अब memcached का उपयोग करता हूं (यह अपनी प्रक्रिया का उपयोग करता है, जो अलग से बढ़ता है), लेकिन कैशिंग बंद करना कुछ भी कैशिंग नहीं करता है। –

2

हम Webfaction पर एक समान मुद्दा था, लेकिन यह पता चला है कि यह उनकी वजह से बिल्कुल नहीं थी । कई तत्वों के साथ साइटमैप का उपयोग करते समय Django में उच्च स्मृति उपयोग के बारे में एक बग है: http://code.djangoproject.com/ticket/11572

जब हमने साइटमैप को हटा दिया तो यह अब तक 9 0 एमबी शूट नहीं करता है। बस सोचा कि मुझे इसका जिक्र करना चाहिए क्योंकि समस्या निवारण के लिए उपयोग में काफी समय लगा।

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