Erlang 21

memsup




erlang

memsup

मॉड्यूल

memsup

मॉड्यूल सारांश

एक मेमोरी सुपरवाइज़र प्रक्रिया

विवरण

memsup एक ऐसी प्रक्रिया है जो सिस्टम के लिए और व्यक्तिगत प्रक्रियाओं के लिए मेमोरी उपयोग की निगरानी करती है। यह OS_Mon एप्लिकेशन का हिस्सा है, os_mon(6) । यूनिक्स, विंडोज और VxWorks के लिए उपलब्ध है।

समय-समय पर एक मेमोरी चेक करता है:

  • यदि उपलब्ध ऑपरेटिंग मेमोरी की एक निश्चित मात्रा से अधिक है, जैसा कि अंतर्निहित ऑपरेटिंग सिस्टम द्वारा रिपोर्ट किया गया है, तो अलार्म {system_memory_high_watermark, []} सेट है।

  • यदि सिस्टम में किसी भी Erlang प्रक्रिया Pid को कुल सिस्टम मेमोरी की एक निश्चित मात्रा से अधिक आवंटित किया गया है, तो अलार्म {process_memory_high_watermark, Pid} सेट है।

alarm_handler(3) अलार्म हैंडलर को अलार्म की सूचना दी जाती है, alarm_handler(3) । अलार्म सेट करने के लिए, alarm_handler:set_alarm(Alarm) को कहा जाता है जहां Alarm या तो ऊपर निर्दिष्ट अलार्म है।

अलार्म स्वचालित रूप से मान्य नहीं होने पर अलार्म स्वचालित रूप से साफ़ हो जाते हैं।

नवीनतम आवधिक मेमोरी जांच के परिणाम को प्राप्त करने के लिए फ़ंक्शन get_memory_data() का उपयोग किया जा सकता है।

सिस्टम आश्रित मेमोरी डेटा, get_system_memory_data() लिए एक इंटरफ़ेस भी है। परिणाम अंतर्निहित ऑपरेटिंग सिस्टम पर अत्यधिक निर्भर है और इंटरफ़ेस मुख्य रूप से वर्चुअल मेमोरी (जैसे VxWorks) के बिना सिस्टम के लिए लक्षित है। अन्य प्रणालियों पर आउटपुट हालांकि अभी भी मान्य है, हालांकि विरल।

get_system_memory_data/0 लिए एक कॉल get_system_memory_data/0 लिए एक कॉल की तुलना में अधिक महंगा है क्योंकि इस फ़ंक्शन को कॉल करने पर डेटा को सिंक्रोनाइज़ किया जाता है।

UNIX के तहत रिपोर्ट की गई कुल सिस्टम मेमोरी में पेज साइज के समय के भौतिक पेजों की संख्या होती है, और उपलब्ध मेमोरी पेज के साइज के समय उपलब्ध भौतिक पेजों की संख्या होती है। यह एक उचित उपाय है क्योंकि स्वैपिंग को वैसे भी टाला जाना चाहिए, लेकिन वर्चुअल मेमोरी और स्वैपिंग के कारण कुल मेमोरी और उपलब्ध मेमोरी को परिभाषित करने का काम मुश्किल है।

विन्यास

निम्न कॉन्फ़िगरेशन पैरामीटर का उपयोग समय अंतराल और थ्रेसहोल्ड के लिए डिफ़ॉल्ट मान बदलने के लिए किया जा सकता है:

memory_check_interval = int()>0

आवधिक मेमोरी जाँच के लिए समय अंतराल, मिनटों में। डिफ़ॉल्ट एक मिनट है।

system_memory_high_watermark = float()

थ्रेसहोल्ड, सिस्टम मेमोरी के प्रतिशत के रूप में, संबंधित अलार्म सेट होने से पहले कितनी सिस्टम मेमोरी आवंटित की जा सकती है। डिफ़ॉल्ट 0.80 (80%) है।

process_memory_high_watermark = float()

थ्रेसहोल्ड, सिस्टम मेमोरी के प्रतिशत के रूप में, संबंधित अलार्म सेट होने से पहले एक एर्लांग प्रक्रिया द्वारा कितनी सिस्टम मेमोरी आवंटित की जा सकती है। डिफ़ॉल्ट 0.05 (5%) है।

memsup_helper_timeout = int()>0

मेमोरी चेक से memsup लिए कितने समय तक इंतजार करना चाहिए, इसके लिए एक टाइमआउट, सेकंड में। यदि टाइमआउट समाप्त हो जाता है, तो एक त्रुटि संदेश "OS_MON (memsup) timeout" error_logger माध्यम से जारी किया जाता है और किसी भी लंबित, सिंक्रोनस क्लाइंट कॉल एक डमी मूल्य वापस कर देगा। आम तौर पर, यह स्थिति नहीं होनी चाहिए। हालांकि, लिनक्स पर ऐसे मामले आए हैं, जहां सिस्टम डेटा को पढ़ने वाली छद्म फाइल अस्थायी रूप से अनुपलब्ध है जब सिस्टम भारी लोड होता है।

डिफ़ॉल्ट तीस सेकंड है।

memsup_system_only = bool()

निर्दिष्ट करता है कि memsup प्रक्रिया में केवल सिस्टम मेमोरी उपयोग ( true ) की जांच होनी चाहिए या नहीं। डिफ़ॉल्ट false , जिसका अर्थ है कि सिस्टम मेमोरी उपयोग और एरलंग प्रक्रिया मेमोरी उपयोग दोनों के बारे में जानकारी एकत्र की गई है।

कई समवर्ती प्रक्रियाओं के साथ सिस्टम पर false को इस पैरामीटर को सेट करने की सिफारिश की जाती है, क्योंकि प्रत्येक प्रक्रिया मेमोरी चेक प्रक्रियाओं की पूरी सूची का एक आघात बनाती है।

कॉन्फ़िगरेशन मापदंडों के मूल्य को कैसे बदलना है, इसकी जानकारी के लिए config(4) देखें।

निर्यात

get_memory_data () -> {कुल, आवंटित, सबसे खराब}

प्रकार

नवीनतम मेमोरी चेक के परिणाम को लौटाता है, जहां Total कुल मेमोरी का आकार है और Allocated मेमोरी साइज को बाइट्स में आवंटित किया है।

Worst नोड पर सबसे बड़ी Erlang प्रक्रिया के आवंटित बाइट्स की पीड और संख्या है। यदि memsup को प्रक्रिया डेटा एकत्र नहीं करना चाहिए, यदि कॉन्फ़िगरेशन पैरामीटर memsup_system_only true सेट किया गया था, तो Worst undefined

फ़ंक्शन सामान्य रूप से इस अर्थ में अतुल्यकालिक है कि यह मेमोरी चेक का आह्वान नहीं करता है, लेकिन नवीनतम उपलब्ध मूल्य को लौटाता है। यदि पहला मेमोरी चेक समाप्त होने से पहले फंक्शन को कॉल किया जाता है, तो वह एक अपवाद है, इस स्थिति में यह तब तक मान वापस नहीं करता है जब तक कि मेमोरी चेक समाप्त न हो जाए।

{0,0,{pid(),0}} या {0,0,undefined} यदि memsup उपलब्ध नहीं है, या यदि सभी मेमोरी चेक अब तक समय से बाहर हो गए हैं।

get_system_memory_data () -> मेमडाटलिस्ट

प्रकार

मेमोरी चेक को आमंत्रित करता है और परिणामी, सिस्टम आश्रित, डेटा को टैग किए गए टुपल्स की सूची के रूप में लौटाता है, जहां Tag निम्नलिखित में से एक हो सकता है:

total_memory
एरलंग एमुलेटर के लिए उपलब्ध स्मृति की कुल राशि, आवंटित और मुफ्त। मई या सिस्टम में कॉन्फ़िगर की गई मेमोरी की मात्रा के बराबर नहीं हो सकता है।
free_memory
आवंटन के लिए Erlang एमुलेटर पर उपलब्ध मुफ्त मेमोरी की मात्रा।
system_total_memory
पूरे ऑपरेटिंग सिस्टम के लिए उपलब्ध स्मृति की मात्रा। यह अच्छी तरह कुल total_memory बराबर हो सकता है लेकिन आवश्यक नहीं है।
largest_free
Erlang एमुलेटर के लिए उपलब्ध सबसे बड़ा सन्निहित मुक्त मेमोरी ब्लॉक का आकार।
number_of_free
Erlang रनटाइम सिस्टम के लिए उपलब्ध नि: शुल्क ब्लॉक की संख्या। यह एक निष्पक्ष संकेत देता है कि स्मृति कितनी खंडित है।
buffered_memory
मेमोरी की मात्रा का उपयोग अस्थायी भंडारण वाले कच्चे डिस्क ब्लॉक के लिए किया जाता है।
cached_memory
डिस्क से पढ़ी गई कैश्ड फ़ाइलों के लिए सिस्टम कितनी मेमोरी का उपयोग करता है
total_swap
डिस्क स्वैप के लिए सिस्टम में कुल मेमोरी की मात्रा उपलब्ध है।
free_swap
सिस्टम की डिस्क स्वैप के लिए स्मृति की मात्रा उपलब्ध है।

सभी मेमोरी साइज़ को बाइट्स की संख्या के रूप में प्रस्तुत किया जाता है।

सबसे largest_free और largest_free टैग वर्तमान में केवल एक VxWorks सिस्टम पर लौटाया गया है।

खाली सूची लौटाता है [] यदि memsup उपलब्ध नहीं है, या यदि मेमोरी बार चेक आउट करती है।

ध्यान दें

लाइनक्स पर एमुलेटर के लिए उपलब्ध मेमोरी cached_memory और buffered_memory के अलावा free_memory

get_os_wordsize () -> शब्दों का उच्चारण करें

प्रकार

वर्तमान चल रहे ऑपरेटिंग सिस्टम के शब्दों को लौटाता है।

get_check_interval () -> एम.एस.

प्रकार

समय-समय पर मेमोरी चेक के लिए, मिलीसेकंड में समय अंतराल देता है।

set_check_interval (मिनट) -> ठीक है

प्रकार

आवधिक मेमोरी जाँच के लिए, समय अंतराल को मिनटों में दिया जाता है।

अगली मेमोरी जांच के बाद परिवर्तन प्रभावी हो जाएगा और गैर-स्थिर है। यही है, प्रक्रिया पुनरारंभ होने की स्थिति में, यह मान भूल जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। ऊपर Configuration देखें।

get_procmem_high_watermark () -> int ()

प्रक्रिया मेमोरी आवंटन के लिए, प्रतिशत में, सीमा को लौटाता है।

set_procmem_high_watermark (फ्लोट) -> ठीक है

प्रक्रिया मेमोरी आवंटन के लिए, फ्लोट के रूप में दी गई सीमा को बदल देता है।

परिवर्तन अगली आवधिक स्मृति जांच के दौरान प्रभावी होगा और गैर-स्थिर है। यही है, प्रक्रिया पुनरारंभ होने की स्थिति में, यह मान भूल जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। ऊपर Configuration देखें।

get_sysmem_high_watermark () -> int ()

सिस्टम मेमोरी आवंटन के लिए, प्रतिशत में, सीमा को लौटाता है।

set_sysmem_high_watermark (फ्लोट) -> ठीक है

सिस्टम मेमोरी एलोकेशन के लिए, फ्लोट के रूप में दी गई सीमा को बदल देता है।

परिवर्तन अगली आवधिक स्मृति जांच के दौरान प्रभावी होगा और गैर-स्थिर है। यही है, प्रक्रिया पुनरारंभ होने की स्थिति में, यह मान भूल जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। ऊपर Configuration देखें।

get_helper_timeout () -> सेकंड

प्रकार

मेमोरी चेक के लिए सेकंड में टाइमआउट मान लौटाता है।

set_helper_timeout (सेकंड) -> ठीक है

प्रकार

मेमोरी चेक के लिए सेकंड में दिया गया टाइमआउट मान बदलता है।

परिवर्तन अगली मेमोरी जांच के लिए प्रभावी होगा और गैर-स्थिर है। यही है, प्रक्रिया पुनरारंभ होने की स्थिति में, यह मान भूल जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। ऊपर Configuration देखें।

यह भी देखें

alarm_handler(3) , os_mon(3)