13

मैं अपने रेल ऐप में प्रोफाइल मेमोरी उपयोग के लिए GC.stat का उपयोग कर रहा हूं। GC.stat रिटर्न निम्नलिखित कुंजी के साथ एक हैश:रूबी के जीसी.स्टैट के क्षेत्र क्या हैं?

:count 
:heap_used 
:heap_length 
:heap_increment 
:heap_live_num 
:heap_free_num 
:heap_final_num 

किसी को भी पता है कि वास्तव में इन मूल्यों को क्या मतलब है? रुबी स्रोत (gc.c) में उनके बारे में कोई दस्तावेज नहीं है, केवल एक टिप्पणी है: "हैश की सामग्री कार्यान्वित की गई है और भविष्य में बदला जा सकता है।"

इनमें से कुछ फ़ील्ड संदर्भ से समझ में आते हैं, उदा। count रूबी आवंटित ढेर की संख्या है। लेकिन heap_final_num क्या है? heap_increment क्या है? heap_length न्यूनतम ढेर आकार है?

मैं RUBY_MIN_HEAP_SLOTS, RUBY_FREE_MIN और RUBY_GC_MALLOC_LIMIT के साथ नगण्य कर रहा हूँ, लेकिन उन env वार्स बदलते :heap_count या :heap_length पर कोई असर दिखाई नहीं देता। मैं उम्मीद करता हूं कि :heap_count नीचे जायेगा यदि मैं मूल रूप से न्यूनतम ढेर स्लॉट बढ़ाता हूं। तो मैं वास्तव में जानना चाहता हूं कि सभी GC.stat मूल्यों का प्रतिनिधित्व क्या है!

मैं रूबी 1.9.3 का उपयोग कर रहा हूं।

उत्तर

12

:count - जीसी चक्रों की संख्या, उदा। कितनी बार जीसी रन किया

:heap_used - आवंटित ढेर की संख्या, माणिक डिफ़ॉल्ट रूप से एक ढेर बनाता है और ढेर संख्या में वृद्धि करता है, तो यह सभी वस्तुओं

:heap_length आवंटित करने के लिए पर्याप्त नहीं है - ढेर के आकार। यह पहला ढेर आकार है। आदर्श रूप में आप स्क्रिप्ट के बाद एक ढेर शुरू होनी चाहिए

:heap_increment - संख्या है कि पिछले ढेर आकार में शामिल किया जाएगा, तो गहरे लाल रंग का नया ढेर बनाता

:heap_live_num - कितने ढेर स्लॉट्स

:heap_free_num आवंटित किए जाते हैं - कैसे कई ढेर स्लॉट के लिए स्वतंत्र हैं

:heap_final_num - finalizers संख्या

स्लॉट जिन्हें आप ठीक कह रहे हैं कि बढ़तीद्वाराढेर की संख्या एक से कम होनी चाहिए। लेकिन उच्च RUBY_FREE_MIN जितना अधिक ढेर आपको मिलेगा। यह मुफ़्त स्लॉट की संख्या को इंगित करता है कि वर्तमान ढेर के पास होना चाहिए, यदि वह संख्या आपके मुकाबले कम है - रूबी नई ढेर बनाता है। RUBY_GC_MALLOC_LIMIT इससे संबंधित है कि रूबी जीसी प्रक्रिया कितनी बार चलाएगी और सीधे ढेर संख्या को प्रभावित नहीं करती है। यह काउंटर इंगित करता है कि कितने मॉलॉक्स रूबी जीसी चलाएंगे। लेकिन इसे पहले भी चलाया जा सकता है। कृपया ध्यान दें कि यह रूबी ओबीजे आवंटन नहीं है, यह वैश्विक रूबी आंतरिक मॉलोक काउंटर है जो किसी भी रूबी दुभाषिया आंतरिक ओबीजे आवंटन में वृद्धि हुई है।

+0

इस जवाब में दी गई जानकारी accurate..see नहीं है [इस पोस्ट] (http://samsaffron.com/archive/2013/11/22/demystifying-the-ruby-gc) सही उत्तर के लिए। – tihom

0

यह की तरह मुझे लग रहा है: गिनती जीसी चक्र 'आलसी स्वीप' की संख्या, नहीं पूर्ण जीसी रूबी एमआरआई 1.9.3p448 पर चक्र है।

मैंने पहले प्रोफाइलर किसी भी जीसी घटनाओं की सूचना दी एक पूर्ण जीसी के लिए मजबूर करने के लिए किया था:

GC::Profiler.enable 
GC.start 
GC::Profiler.report 
संबंधित मुद्दे