2011-06-26 21 views
25

मैं निगेंक्स और कुछ अन्य कार्यक्रमों के साथ एक छोटी वीपीएस (512 एमबी रैम) पर खरगोश एमक्यू चलाने की कोशिश कर रहा हूं। मैं कठिनाई के बिना बाकी सब कुछ के स्मृति उपयोग को ट्विक करने में सक्षम हूं, लेकिन मुझे किसी भी कम रैम का उपयोग करने के लिए RabbitMQ नहीं मिल रहा है।खरगोश एमक्यू मेमोरी उपयोग को कम करें

मुझे लगता है कि मुझे खरगोश एमक्यू के लिए एर्लंग उपयोगों की संख्या को कम करने की आवश्यकता है, लेकिन मैं इसे काम करने में सक्षम नहीं हूं। मैं भी रूप में भी 5% के रूप में कम, डिफ़ॉल्ट (40% की) नीचे कुछ अलग मूल्यों के vm_memory_high_watermark स्थापित करने की कोशिश की है।

समस्या का एक हिस्सा यह हो सकता है कि वीपीएस प्रदाता (मीडिया टेम्पल) मुझे मेरी आवंटित स्मृति पर जाने की अनुमति देता है, इसलिए जब मुफ्त या शीर्ष का उपयोग किया जाता है, तो यह दिखाता है कि सर्वर के पास लगभग 900 एमबी है।

खरगोश एमक्यू द्वारा स्मृति उपयोग को कम करने के लिए कोई सुझाव, या एरलांग बनाने वाले धागे की संख्या सीमित करें? मेरा मानना ​​है कि एरलांग 30 थ्रेड का उपयोग कर रहा है, जो एए 30 ध्वज पर आधारित है जिसे मैंने प्रक्रिया कमांड पर देखा है।

आदर्श रूप से मैं 100 एमबी से नीचे होने के लिए RabbitMQ mem उपयोग करना चाहता हूं।

संपादित करें:

vm_memory_high_watermark के साथ 5% (या कॉन्फ़िग फ़ाइल में 0.05) के लिए सेट, RabbitMQ लॉग की रिपोर्ट है कि RabbitMQ की स्मृति सीमा 51mb को तैयार है। मुझे यकीन नहीं है कि 51 एमबी कहां से आ रहा है। वर्तमान वीपीएस आवंटित स्मृति 924 एमबी है, इसलिए इसमें से 5% लगभग 46 एमबी होना चाहिए।

htop/मुक्त के अनुसार

RabbitMQ अप शुरू करने से पहले, मैं प्रयुक्त राम की 453mb चारों ओर बैठा हूँ, और शुरू RabbitMQ के बाद मैं 650MB के आसपास रहा हूँ। लगभग 200 एमबी वृद्धि। क्या यह हो सकता है कि 200 एमबी निम्न सीमा है कि खरगोश एमक्यू के साथ चलेगा?

संपादित 2

ps aux की Here are some screenshots और पहले और RabbitMQ और स्मृति कील दिखा जब RabbitMQ शुरू कर दिया है एक ग्राफ शुरू करने के बाद।

संपादित 3

मैं भी कोई प्लगइन्स के साथ की जाँच सक्षम है, और यह बहुत कम अंतर बना दिया। यह प्लगइन्स मैं था (प्रबंधन और अपने आवश्यक शर्तें) केवल राम उपयोग के 8mb के बारे में जोड़ा लगता है।

संपादित 4

मैं अब के साथ परीक्षण करने के लिए इस सर्वर है, तथापि, वहाँ एक conf delegate_count कि जहाँ तक मुझे पता के रूप में 16 वर्ष की एक डिफ़ॉल्ट के लिए सेट है सेटिंग होती है, यह spawns 16 sup- खरगोश के लिए procs। छोटे सर्वर पर इस नंबर को कम करने से स्मृति पदचिह्न को कम करने में मदद मिल सकती है। इस करता है, तो कोई विचार वास्तव में काम करता है, या यह कैसे प्रभावों प्रदर्शन, लेकिन यह कोशिश करने के लिए कुछ न कुछ है।

उत्तर

9

सीमित करने के लिए RabbitMQ में स्मृति उपयोग vm_memory_high_watermark उपयोग कर रहा है उचित तरीके से। आप ने कहा:

मैं भी रूप में भी 5% के रूप में कम, डिफ़ॉल्ट ( 40%) नीचे कुछ विभिन्न मूल्यों के लिए vm_memory_high_watermark स्थापित करने की कोशिश की है।

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

=INFO REPORT==== 29-Oct-2009::15:43:27 === 
Memory limit set to 2048MB. 

आप स्मृति सीमा की जरूरत के रूप में बदलाव करने की जरूरत है: लॉग में, आप एक लाइन है जो आपको बताता क्या पूर्ण स्मृति सीमा नहीं है, कुछ इस तरह मिल जाएगा यदि आप एक वीपीएस पर्यावरण पर चल रहे हैं तो आपके विचार से बहुत अधिक रैम है।

कभी-कभी, खरगोश यह नहीं बता सकता कि आप किस प्रणाली पर हैं और आधार बिंदु के रूप में 1 जीबी का उपयोग करते हैं (इसलिए आपको डिफ़ॉल्ट रूप से 410 एमबी की सीमा मिलती है)।

इसके अलावा, सुनिश्चित करें कि आप RabbitMQ के संस्करण पर चल रहे हैं जो vm_memory_high_watermark सेटिंग का समर्थन करता है - आदर्श रूप से आपको नवीनतम स्थिर रिलीज के साथ चलना चाहिए।

+0

जब मैंने 'vm_memory_high_watermark' का उपयोग किया, तो उसने लॉग में सही रैम सीमा की रिपोर्ट की (वीपीएस के वास्तविक 900 एमबी के आधार पर, मैंने खरीदा 512 एमबी नहीं)। 5% पर सेट होने पर लॉग 45 एमबी दिखाए जाते हैं, लेकिन प्रत्येक एरलांग प्रक्रिया जो कि 20 से 25 एमबी रैम के बीच उपयोग की जाती है, जो मुझे तुरंत मेरे 512 एमबी आवंटन पर डाल देती है। –

+0

जब आप कहते हैं 'प्रत्येक erlang प्रक्रिया' का मतलब है, ओएस erlang प्रक्रिया या आंतरिक प्रक्रिया erlang? –

+0

जब मैं htop चलाता हूं, तो मुझे 30 या तो '/usr/lib/erlang/erts-5.7.4/bin/beam.smp -W w -K true -A30 -P 1048576' और उसके बाद RabbitMQ से संबंधित कुछ झंडे दिखाई देते हैं और mnesia। –

1

एक उचित क्यूओएस प्रीफेच मूल्य निर्धारित करना सुनिश्चित करें। डिफ़ॉल्ट रूप से, यदि कोई ग्राहक है, तो खरगोश सर्वर क्लाइंट के उस ग्राहक की कतार के लिए उसके पास कोई संदेश भेजेगा। इसके परिणामस्वरूप क्लाइंट & सर्वर पर व्यापक मेमोरी उपयोग होता है।

प्रीफ़ेच सीमा को कुछ उचित मान दें, जैसे कि 100 कहें, और खरगोश सर्वर पर डिस्क पर शेष संदेश रखेगा जब तक कि ग्राहक वास्तव में उन्हें संसाधित करने के लिए तैयार न हो जाए, और आपका मेमोरी उपयोग दोनों तरह से नीचे जायेगा क्लाइंट & सर्वर।

ध्यान दें कि 100 का सुझाव शुरू करने के लिए सिर्फ एक उचित जगह है - यह निश्चित रूप से अनंतता को धड़कता है। वास्तव में उस नंबर को अनुकूलित करने के लिए, आप अपने क्लाइंट को संसाधित करने में सक्षम संदेश/सेकंड, आपके नेटवर्क की विलंबता, और यह भी कि आपके प्रत्येक संदेश औसत पर कितना बड़ा है, इसे ध्यान में रखना चाहेंगे।

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