2014-05-23 4 views
5

मैं समस्या निवारण कर रहा हूं जो हमारे कॉन्फ़िगरेशन पृष्ठ में मेमोरी लीक प्रतीत होता है। पृष्ठ का उपयोग हमारी सेवा की कॉन्फ़िगरेशन को बदलने के लिए किया जाता है और स्वास्थ्य निदान भी प्रदर्शित करता है। इसका अर्थ यह है कि हम समय-समय पर कॉन्फ़िगरेशन और इंस्ट्रूमेंटेशन जानकारी के लिए सेवा से पूछताछ कर रहे हैं (आमतौर पर हम 30sec के क्वेरी अंतराल का उपयोग करते हैं, लेकिन समस्या निवारण के लिए मैं 100ms अंतराल पर पूछताछ कर रहा हूं)। हम knockoutjs, datajs, jquery और spinjs पर भरोसा करते हैं।जावास्क्रिप्ट ढेर स्मृति स्थिर है, लेकिन ब्राउजर प्रक्रिया निजी बाइट बढ़ रहे हैं। स्मृति अंतर कहां से आता है?

मुझे पता चला है कि अगर मैं 100 एमएमएस क्वेरी अंतराल पर रातोंरात खुला रहता हूं तो क्रोम ब्राउज़र टैब के लिए निजी बाइट लगभग 50 एमबी से 335 एमबी तक बढ़ता है। मेरे पास इस मुद्दे के साथ चार पृष्ठ हैं, लेकिन मेरे समस्या निवारण प्रयास के दौरान एक पर ध्यान केंद्रित किया गया है। क्रोम का उपयोग करना: // मेमोरी-रीडायरेक्ट/मैं पेज (प्रक्रिया आईडी 26148) मेमोरी देख सकता हूं।

enter image description here

हालांकि, जावास्क्रिप्ट ढेर स्मृति 3.6MB में इसी अवधि में फ्लैट प्रतीत होता है। क्रोम में ढेर प्रोफाइलिंग टूल का उपयोग करके यह दिखाता है कि मेरे सभी ऑब्जेक्ट आवंटन कचरा एकत्रित होते हैं।

enter image description here

ऊपर चित्र में ग्रे आवंटन संकेत मिलता है कि वस्तुओं जीसी द्वारा साफ किया गया है।

enter image description here

स्मृति समय भी स्थिर है।

enter image description here

मैं भी दो जेंटलमैन कैडेट मजबूर किया और पुष्टि की है कि दस्तावेजों, नोड्स और श्रोताओं की संख्या दो जेंटलमैन कैडेट के बीच निरंतर था।

enter image description here

मेरे प्रश्न हैं:

  1. कहाँ प्रक्रिया स्मृति का उपयोग किया जा रहा है कि जावास्क्रिप्ट ढेर का हिस्सा नहीं है?
  2. हमारी जावास्क्रिप्ट ढेर मेमोरी को देखते हुए, क्या यह अतिरिक्त स्मृति हमारे जावास्क्रिप्ट कोड के कारण मेमोरी लीक हो सकती है?

सभी मदद के लिए धन्यवाद!

+0

क्या आपके पास कंसोल खुला होने पर आपका नेटवर्क टैब सक्षम है? –

+0

@PaulS प्रत्येक अनुरोध के लिए यह अनुरोध शीर्षलेख, प्रतिक्रिया शीर्षलेख, शरीर इत्यादि की एक प्रति रखेगा। - क्या आप यह कह रहे हैं कि यदि खोला गया तो नेटवर्क टैब समस्या का कारण बन सकता है? मेरे पास क्रोम देव उपकरण सक्षम नहीं थे, जिसमें नेटवर्क टैब भी शामिल था, जिसमें परीक्षण चलाने के दौरान स्मृति उपयोग में वृद्धि हुई थी क्योंकि मुझे डर था कि यह बहुत अधिक मेमोरी का उपयोग करेगा और मुझे झूठे परिणाम देगा। –

+0

क्या आपको कभी इस समस्या का जवाब मिला? हम क्रोम 40 में एक ही व्यवहार देख रहे हैं। – integragreg

उत्तर

-1

आप सेब और संतरे की तुलना कर रहे हैं - कचरा एक उप-ढेर और पूरी एप्लिकेशन मेमोरी में स्मृति एकत्रित करता है।

आपने जावास्क्रिप्ट ढेर का निरीक्षण करने के लिए क्रोम का उपयोग किया है और यह पाया है कि आपके एप्लिकेशन का जावास्क्रिप्ट हिस्सा ठीक चल रहा है।

आप क्रोम के वैश्विक मेमोरी उपयोग की निगरानी करने के लिए एक टूल का भी उपयोग कर रहे हैं। यह वह स्मृति है जो क्रोम किसी भी कार्य के लिए उपयोग कर रही है, जिसमें आपके एप्लिकेशन से सीधे संबंधित कार्यों को शामिल नहीं किया गया है, बल्कि ब्राउज़र के कामकाज के लिए भी।

शायद आपको एक ऐसा उपयोग केस मिला है जो क्रोम आंतरिक में मेमोरी लीक ट्रिगर करता है?

या शायद यह स्मृति रिसाव नहीं है, लेकिन गैर-कचरे में स्मृति विखंडन क्रोम द्वारा उपयोग किए जाने वाले आंतरिक ढेर एकत्रित करता है?

इस web page के अनुसार क्रोम सी, सी ++, जावा, जावास्क्रिप्ट और पायथन के मिश्रण में लिखा गया है। इसका मतलब है कि हमारे पास सी और सी ++ के लिए निर्धारक स्मृति आवंटक और जावा, जावास्क्रिप्ट और पायथन के लिए एकत्रित तीन अलग-अलग प्रकार के कचरे हैं। बुरी खबर: पाइथन का पूर्णांक की हैंडलिंग कचरा संग्रह की बात करते समय स्मृति उपयोग पर इतनी दयालु नहीं है (पिछली बार मैंने चेक किया था, जो कुछ साल पहले था, शायद उन्होंने इसे सुधार लिया है)।

लेकिन मेरे पास क्रोम सत्र बिना किसी समस्या के सप्ताह चलते हैं। तो मुझे आश्चर्य है कि क्या हो रहा है।

आप यह नहीं कहते कि आप किस ओएस का उपयोग कर रहे हैं लेकिन यदि आप माइक्रोसॉफ्ट विंडोज का उपयोग कर रहे हैं तो आप C++ Memory Validator का उपयोग कर सकते हैं ताकि प्रत्येक आवंटन (पूर्ण कॉलस्टैक, कितने बाइट्स इत्यादि) का निरीक्षण किया जा सके, क्रोम चालू हो रहा है (क्रोम लॉन्च करें सी ++ मेमोरी वैलिडेटर से, अपना आवेदक लोड करें, इसे मेमोरी टैब पर क्लिक करें और पर रीफ्रेश करें - यह ट्रैक किए जा सकने वाले सभी लाइव आवंटन प्रदर्शित करेगा - किसी भी स्थिर रूप से जुड़े ढेर के रूप में ट्रैक करने योग्य नहीं होगा आपके पास प्रतीकों को झुकाव करने की अनुमति देने के लिए प्रतीक नहीं होंगे)। ठीक है, आपके पास teh callstacks को पढ़ने योग्य बनाने के लिए प्रतीक नहीं हैं लेकिन आप अभी भी उसी स्थान पर होने वाले आवंटन की पहचान कर सकते हैं। इससे आपको रिसाव/विखंडन के कारण के रूप में एक सुराग मिल सकता है ताकि यह क्रोम देवताओं को नज़दीकी रूप से देखने के लिए रिपोर्ट कर सके।

क्या आपको फ़ायरफ़ॉक्स में वही व्यवहार मिलता है? यदि आप तब कर सकते हैं जो मैं सी ++ मेमोरी वैलिडेटर के साथ सुझाता हूं लेकिन इसे फ़ायरफ़ॉक्स के निर्माण पर करता हूं जिसे आपने स्वयं बनाया है - आपके पास प्रतीक और स्रोत होंगे और पता होगा कि समस्या कहां है।

अस्वीकरण। मैं सी ++ मेमोरी वैलिडेटर का डिजाइनर हूं।

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