2013-04-30 9 views
32

में कचरा कलेक्टर ट्यूनिंग मैं सोच रहा था कि जीसी ट्यूनिंग रूबी 1.9.एक्स के लिए उपयोग की जाती है, फिर भी जीसी के नए कार्यान्वयन के साथ 2.0 में प्रासंगिक है। यदि हां, तो क्या कोई नई चीजें हैं जिन्हें हम नए संस्करण पर कॉन्फ़िगर कर सकते हैं?रूबी 2.0

मैं निम्नलिखित सेटअप

RUBY_HEAP_MIN_SLOTS=600000 
RUBY_GC_MALLOC_LIMIT=59000000 
RUBY_HEAP_FREE_MIN=100000 

उत्तर

51

इन जीसी ट्यूनिंग पैरामीटर के बारे में भ्रम की स्थिति का एक उचित सा बारे में बात कर रहा हूँ। आरईई (जो रुबी 1.8.7 का कांटा है) introduced its own parameters first, और बाद में रूबी (1.9.2 से शुरू) ने अपने स्वयं के (समान) पैरामीटर पेश किए। रूबी 1.9.3 ने उन्हें पर्यावरण चर के माध्यम से अनुकूलन किया, और रूबी 2.1.0 ने बहुत कुछ जोड़ा।

This blog post एमआरआई में कचरा संग्रह और सभी ट्यूनिंग चर के मतलब के बारे में बहुत विस्तार से जाता है।

REE source

  • RUBY_HEAP_MIN_SLOTS
  • RUBY_HEAP_SLOTS_INCREMENT
  • RUBY_HEAP_SLOTS_GROWTH_FACTOR
  • RUBY_GC_MALLOC_LIMIT
  • :

    यहाँ प्रत्येक रूबी संस्करण के लिए सभी ट्यूनिंग चर की एक पूरी सूची है

  • RUBY_HEAP_FREE_MIN

रूबी 1.9.2 sourcesource

(हार्ड कोडित, लेकिन साथ वातावरण चर के माध्यम से अनुकूलन)

  • GC_MALLOC_LIMIT
  • HEAP_MIN_SLOTS
  • FREE_MIN

रूबी 1.9.3 source

  • RUBY_GC_MALLOC_LIMIT
  • RUBY_HEAP_MIN_SLOTS
  • RUBY_FREE_MIN

रूबी 2.0.0 source

रूबी के समान 1.9.3

रूबी 2.1।0 source

  • RUBY_GC_HEAP_INIT_SLOTS (RUBY_HEAP_MIN_SLOTS obsoletes)
  • RUBY_GC_HEAP_FREE_SLOTS (obsoletes RUBY_FREE_MIN)
  • RUBY_GC_HEAP_GROWTH_FACTOR (नया)
  • RUBY_GC_HEAP_GROWTH_MAX_SLOTS (नया)
  • RUBY_GC_MALLOC_LIMIT
  • RUBY_GC_MALLOC_LIMIT_MAX (नया)
  • RUBY_GC_MALLOC_LIMIT_GROWTH _FACTOR (नया)
  • RUBY_GC_OLDMALLOC_LIMIT (नया)
  • RUBY_GC_OLDMALLOC_LIMIT_MAX (नया)
  • RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR (नया)

रूबी 2.1.1 source

  • RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR (नया)
+0

की तरह [रूबी 1.9.2] (https://github.com/ruby/ लग रहा है रूबी/ब्लोब/ruby_1_9_2/gc.C# L77-L79) में RUBY_GC_MALLOC_LIMIT नहीं है। इसके बजाय इसमें GC_MALLOC_LIMIT है जो #define मैक्रो के साथ प्रारंभ किया गया है। इसका मतलब है कि हमें जीसीसी में मूल्य बदलने की जरूरत है और जब जीसी चलाता है तो उसे नियंत्रित करने के लिए रुबी को फिर से कंपाइल करें। – ardsrk

+0

आप बिल्कुल सही हैं। मैंने सुधार में जोड़ा। – davogones

+0

इसके अलावा, इनमें से कोई भी पर्यावरण चर के माध्यम से 1.9.2 में सेटटेबल है जहां तक ​​मैं कह सकता हूं। –

14

रूबी 2.1.x http://tmm1.net/ruby21-rgengc/

export RUBY_GC_HEAP_INIT_SLOTS=600000 
export RUBY_GC_HEAP_FREE_SLOTS=600000 
export RUBY_GC_HEAP_GROWTH_FACTOR=1.25 
export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=300000 

से या इस

# Boost Ruby 
export RUBY_GC_HEAP_INIT_SLOTS=1000000 # 1M 
export RUBY_GC_HEAP_FREE_SLOTS=500000 # 0.5M 
export RUBY_GC_HEAP_GROWTH_FACTOR=1.1 
export RUBY_GC_HEAP_GROWTH_MAX_SLOTS=10000000 # 10M 
export RUBY_GC_MALLOC_LIMIT_MAX=1000000000 # 1G 
export RUBY_GC_MALLOC_LIMIT_GROWTH_FACTOR=1.1 
# export RUBY_GC_OLDMALLOC_LIMIT=500000000  # 500M 
# export RUBY_GC_OLDMALLOC_LIMIT_MAX=1000000000 # 1G 
# export RUBY_GC_OLDMALLOC_LIMIT_GROWTH_FACTOR=1.1 

Performance MRI Ruby Patch

$ rvm install 2.1.2 --patch railsexpress -n railsexpress 
$ rvm --default use 2.1.2-railsexpress 
+1

कुछ स्निपेट में सराहना करते हैं भ्रामक हैं: 'RUBY_GC_HEAP_INIT_SLOTS' और 'RUBY_GC_HEAP_FREE_SLOTS' पूर्ण संख्याओं का प्रतिनिधित्व करते हैं, बाइट्स नहीं। – Agis

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