2012-08-29 21 views
12

मैं सिर्फ RabbitMQ की config विवरण के लिए देख रहा हूँ औरRabbitMQ + मेमोरी सीमाएं

[{rabbit, [{vm_memory_high_watermark, 0}, 
      {disk_free_limit, {mem_relative, 1.0}} 
      ] 
}] 

में आए इस config क्या मतलब है?

vm_memory_high_watermark 0 पर सेट = = सभी प्रकाशकों को तुरंत ब्लॉक करें rabbitmq ऐप शुरू होता है? लेकिन हम अभी भी rabbitmq को जो भी संदेश भेजते हैं उसे कतार में देख सकते हैं।

16720 rabbitmq 20 0 142m 62m 2408 S 0 **1.6** 0:06.88 beam.smp 

जब भी हम ब्रोकर को संदेश भेजते हैं तो हम इस प्रक्रिया को स्मृति उपयोग में वृद्धि करते हैं। तो, क्या इसका मतलब है कि संदेश स्मृति में हैं हालांकि वॉटरमार्क 0 पर सेट है?

हम जानकर उत्सुक हैं कि राम की याद सीमा कब तक पहुंच जाती है और अभी भी संदेश भेजे जा रहे हैं? या तो प्रकाशक अवरुद्ध हैं? या संदेश उपलब्ध होने पर डिस्क पर बदल दिए जाते हैं?

उत्तर

13

vm_memory_high_watermark एक प्रतिशत मान है RabbitMQ में स्मृति प्रवाह नियंत्रण से संबंधित है।

आप Memory flow control पर एक नज़र डालें, तो आप इसे का कहना है कि, देखेंगे के तहत "मेमोरी आधारित प्रवाह नियंत्रण" शीर्षक:

RabbitMQ सर्वर रैम की कुल राशि स्टार्टअप पर कंप्यूटर में स्थापित पता लगाता है और जब rabbitmqctl set_vm_memory_high_watermark अंश निष्पादित किया जाता है। डिफ़ॉल्ट रूप से, जब RabbitMQ सर्वर स्थापित RAM के 40% से ऊपर का उपयोग करता है, तो यह एक मेमोरी अलार्म उठाता है और सभी कनेक्शन ब्लॉक करता है। एक बार मेमोरी अलार्म साफ़ हो जाने के बाद (उदा। सर्वर को संदेश पेजिंग संदेशों के कारण डिस्क पर या ग्राहकों को वितरित करने के कारण) सामान्य सेवा फिर से शुरू होती है।

तो आप इस मान को 0 पर सेट करके, तो निश्चित रूप से यह तुरंत ट्रिगर हो जाएगा! यदि आप चाहते हैं कि RabbitMQ को अधिक मेमोरी का उपयोग करने की अनुमति दी जाए तो आप मूल्य में वृद्धि करना चाहेंगे।

एक अन्य महत्वपूर्ण ध्यान दें:

डिफ़ॉल्ट स्मृति सीमा स्थापित रैम का 40% पर सेट है। ध्यान दें कि यह RabbitMQ सर्वर को 40% से अधिक का उपयोग करने से नहीं रोकता है, यह केवल वह बिंदु है जिस पर प्रकाशकों को थ्रॉटल किया जाता है।

तो यदि आप अलार्म उठाए जाने पर संदेशों को प्रकाशित करने का प्रयास करते हैं तो आपके प्रकाशकों को संदेश भेजने से अवरुद्ध कर दिया जाएगा।

आप सभी प्रकाशकों को ब्लॉक करने के तो आप 0 पर vm_memory_high_watermark स्थापित करेगा यदि आप चाहते हैं 'असमर्थ' स्मृति आधारित प्रवाह नियंत्रण तो लिंक ऊपर से 100 विवरण देखने के लिए vm_memory_high_watermark सेट करना चाहते हैं:

0 का मान मेमोरी अलार्म तुरंत बंद हो जाता है और इस प्रकार सभी प्रकाशन अक्षम करता है (यदि आप वैश्विक रूप से प्रकाशन को अक्षम करना चाहते हैं तो यह उपयोगी हो सकता है; rabbitmqctl set_vm_memory_high_watermark 0 का उपयोग करें)। मेमोरी अलार्म को बंद होने से रोकने के लिए, कुछ उच्च गुणक जैसे 100.

+0

हां मैं उस दस्तावेज़ से गुजर चुका था। थ्रॉटल द्वारा आपका क्या मतलब है [msgstr "संदेशों का% गिराया जा सकता है] और अवरुद्ध [कोई संदेश नहीं भेजा जा सकता है]? अगर मैं 0% निर्दिष्ट करता हूं तो पल ऐप शुरू होने पर अलार्म चालू होना चाहिए? तो सभी प्रकाशक संदेशों को संस्कार अवरुद्ध किया जाना चाहिए? या थ्रॉटल? क्या होता है अगर मैंने पूरी तरह मेमोरी-आधारित प्रवाह नियंत्रण [0%] अक्षम कर दिया हो? – Tamil

+1

इस स्थिति में थ्रॉटल किए जाने के परिणामस्वरूप प्रकाशकों को पूरी तरह अवरुद्ध किया जा रहा है (क्योंकि अलार्म ट्रिगर किया गया है)। यदि आप 0% निर्दिष्ट करते हैं तो आप सही हैं, अलार्म ट्रिगर हो जाएगा और सभी प्रकाशकों को अवरुद्ध कर दिया जाएगा। यदि आप स्मृति आधारित प्रवाह नियंत्रण को अक्षम करना चाहते हैं तो 100 को मान सेट करें, 0 बस सब कुछ – kzhen

+0

को अवरुद्ध कर देगा। मैंने अपना उत्तर – kzhen

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