के साथ मेमोरी विखंडन को कम करें मैं लंबे समय से चल रहे पायथन 2 प्रक्रिया में स्मृति प्रबंधन को प्रभावित करने के लिए MALLOC_MMAP_THRESHOLD_ और MALLOC_MMAP_MAX_ env चर के साथ प्रयोग कर रहा हूं। देखें http://man7.org/linux/man-pages/man3/mallopt.3.htmlMALLOC_MMAP_THRESHOLD_ और MALLOC_MMAP_MAX_
मैं इस बग रिपोर्ट से विचार आया: http://bugs.python.org/issue11849
परिणाम रहा है प्रोत्साहित कर रहे हैं: स्मृति विखंडन कम हो जाता है और ठेठ उच्च पानी के निशान स्मृति में दिखाई दे रहा लंबे समय से चल प्रक्रियाओं द्वारा इस्तेमाल किया कम है ।
मेरी एकमात्र चिंता यह है कि ऐसे कम स्तर के बदलावों का उपयोग करते समय अन्य दुष्प्रभाव होते हैं जो पीछे काट सकते हैं। क्या किसी का उपयोग करने में कोई अनुभव है? https://gist.github.com/lbolla/8e2640133032b0a6bb9c बस "alloc.sh" चलाने के लिए और उत्पादन की तुलना:
यहाँ एक उदाहरण स्क्रिप्ट पता चलता है कि कैसे वे चर एक स्क्रिप्ट है कि एक बड़ी शब्दकोश उत्पन्न में आरएसएस स्मृति को प्रभावित है।
MALLOC_MMAP_THRESHOLD_=None MALLOC_MMAP_MAX_=None
N=9 RSS=120968
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=None
N=9 RSS=157008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=None
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=None
N=9 RSS=98528
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=0
N=9 RSS=121012
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=0
N=9 RSS=121000
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=16777216
N=9 RSS=157004
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98528
आप देख सकते हैं प्रयोग किया जाता है राष्ट्रीय स्वयंसेवक संघ के बारे में 20% इस उदाहरण के लिए वेनिला अजगर से कम है,: यहाँ मेरे लिए उत्पादन होता है।
इसके आसपास काम करने का एक तरीका एक फोर्क प्रक्रिया में काम करना है जो तब निकलता है। – o9000
@ o9000 मैं ऐसा नहीं कर सकता, क्योंकि प्रश्न में प्रक्रिया लंबे समय से चल रही है। यह एक सर्वर है, जो लंबे समय तक वहां होना चाहिए। – lbolla
@ इबोला आप सर्वर मामलों में भी ऐसा कर सकते हैं। सर्वर प्रक्रिया से कांटा, स्मृति आवंटन ऑपरेशन चलाएं, फोर्क प्रक्रिया से सर्वर प्रक्रिया में वापस लौटें, फोर्कड प्रक्रिया समाप्त करें, ग्राहक से अनुरोध करें कि वह अनुरोध करे। अब, इसका मतलब यह नहीं है कि आपने समस्या हल कर ली है। हो सकता है कि इनपुट और आउटपुट इतने बड़े हों कि उन्हें सर्वर पर भारी मेमोरी आवंटन की आवश्यकता होगी। वाईएमएमवी लेकिन आप इसे कर सकते हैं। – marr75