Erlang 20 | memsup - Code Examples
एक मेमोरी पर्यवेक्षक प्रक्रिया
memsup एक प्रक्रिया है जो सिस्टम के लिए और व्यक्तिगत प्रक्रियाओं के लिए स्मृति उपयोग की निगरानी करती है। यह OS_Mon एप्लिकेशन का हिस्सा है, os_mon(6) । यूनिक्स, विंडोज और वीएक्सवर्क्स के लिए उपलब्ध है।
समय-समय पर स्मृति जांच करता है:
यदि अंतर्निहित ऑपरेटिंग सिस्टम द्वारा रिपोर्ट की गई है, तो उपलब्ध सिस्टम मेमोरी की एक निश्चित मात्रा से अधिक आवंटित किया गया है, अलार्म {system_memory_high_watermark, []} सेट है।
यदि सिस्टम में किसी भी एरलांग प्रक्रिया {process_memory_high_watermark, 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 पर कॉल से अधिक महंगा है क्योंकि इस फ़ंक्शन को कॉल करते समय डेटा को समकालिक रूप से एकत्र किया जाता है।
यूनिक्स के तहत रिपोर्ट की गई कुल सिस्टम मेमोरी पेज आकार के स्मृति समय के भौतिक पृष्ठों की संख्या है, और उपलब्ध स्मृति पृष्ठ के आकार के समय उपलब्ध भौतिक पृष्ठों की संख्या है। यह एक उचित उपाय है क्योंकि स्वैपिंग को किसी भी तरह से बचा जाना चाहिए, लेकिन वर्चुअल मेमोरी और स्वैपिंग के कारण कुल मेमोरी और उपलब्ध मेमोरी को परिभाषित करने का कार्य मुश्किल है।
निम्नलिखित अंतराल पैरामीटर का उपयोग समय अंतराल और थ्रेसहोल्ड के लिए डिफ़ॉल्ट मानों को बदलने के लिए किया जा सकता है:
आवधिक स्मृति जांच के लिए मिनटों में, समय अंतराल। डिफ़ॉल्ट एक मिनट है।
थ्रेसहोल्ड, सिस्टम मेमोरी के प्रतिशत के रूप में, संबंधित अलार्म सेट होने से पहले एक एरलांग प्रक्रिया द्वारा कितनी सिस्टम मेमोरी आवंटित की जा सकती है। डिफ़ॉल्ट 0.05 (5%) है।
एक टाइमआउट, सेकंड में, स्मृति स्मृति से परिणाम के लिए memsup प्रक्रिया कितनी देर तक प्रतीक्षा करनी चाहिए। यदि टाइमआउट समाप्त हो जाता है, तो एक चेतावनी संदेश "OS_MON (memsup) timeout" error_logger माध्यम से जारी किया जाता है और कोई लंबित, सिंक्रोनस क्लाइंट कॉल एक डमी मान error_logger । आम तौर पर, यह स्थिति नहीं होनी चाहिए। लिनक्स पर ऐसे मामले रहे हैं, हालांकि, जहां सिस्टम डेटा को पढ़ा जाता है, वहां से छद्म फ़ाइल अस्थायी रूप से अनुपलब्ध होती है जब सिस्टम को भारी लोड किया जाता है।
निर्दिष्ट करता है कि memsup प्रक्रिया केवल सिस्टम मेमोरी उपयोग ( true ) की जांच करनी चाहिए या नहीं। डिफ़ॉल्ट false , जिसका अर्थ है कि सिस्टम मेमोरी उपयोग और एरलांग प्रक्रिया मेमोरी उपयोग दोनों के बारे में जानकारी एकत्र की जाती है।
इस पैरामीटर को कई समवर्ती प्रक्रियाओं वाले सिस्टम पर false पर सेट करने की अनुशंसा की जाती है, क्योंकि प्रत्येक प्रक्रिया मेमोरी चेक प्रक्रियाओं की पूरी सूची का एक ट्रैवर्सल बनाता है।
नवीनतम मेमोरी चेक का परिणाम देता है, जहां कुल मेमोरी आकार Total है और बाइट्स में आवंटित स्मृति आकार आवंटित किया जाता है।
नोड पर सबसे बड़ी एरलांग प्रक्रिया के आवंटित बाइट्स की पिड और संख्या Worst है। यदि memsup प्रक्रिया डेटा एकत्र नहीं करना चाहिए, तो यह है कि कॉन्फ़िगरेशन पैरामीटर memsup_system_only true सेट किया गया था, Worst undefined ।
फ़ंक्शन सामान्य रूप से इस तरह से असीमित है कि यह स्मृति जांच का आह्वान नहीं करता है, लेकिन नवीनतम उपलब्ध मान देता है। एक अपवाद अगर फंक्शन है तो पहले मेमोरी चेक समाप्त होने से पहले कहा जाता है, जिस स्थिति में यह स्मृति मान समाप्त होने तक एक मान वापस नहीं करता है।
अगर memsup उपलब्ध नहीं है, या यदि सभी मेमोरी चेक अब तक समाप्त हो गए हैं, तो {0,0,{pid(),0}} या {0,0,undefined} memsup है।
मेमोरी चेक को आमंत्रित करता है और परिणामी, सिस्टम निर्भर, डेटा टैग किए गए टुपल्स की सूची के रूप में देता है, जहां Tag निम्न में से एक हो सकता है:
Erlang एमुलेटर, आवंटित और मुक्त करने के लिए उपलब्ध स्मृति की कुल राशि। सिस्टम में कॉन्फ़िगर की गई स्मृति की मात्रा के बराबर या नहीं हो सकता है।
आवंटन के लिए Erlang एमुलेटर के लिए उपलब्ध मुफ्त मेमोरी की मात्रा।
पूरे ऑपरेटिंग सिस्टम के लिए उपलब्ध स्मृति की मात्रा। यह total_memory बराबर हो सकता है लेकिन जरूरी नहीं है।
Erlang एमुलेटर के लिए उपलब्ध सबसे बड़ा संगत मुक्त स्मृति ब्लॉक का आकार।
Erlang रनटाइम सिस्टम के लिए उपलब्ध मुफ्त ब्लॉक की संख्या। यह एक उचित संकेत देता है कि स्मृति कितनी खंडित है।
अस्थायी भंडारण कच्चे डिस्क ब्लॉक के लिए सिस्टम स्मृति की मात्रा का उपयोग करता है।
डिस्क से पढ़ने वाली कैश की गई फ़ाइलों के लिए सिस्टम का उपयोग स्मृति की मात्रा।
डिस्क स्वैप के लिए सिस्टम उपलब्ध स्मृति की कुल मात्रा की मात्रा।
डिस्क स्वैप के लिए सिस्टम की स्मृति की मात्रा उपलब्ध है।
सभी मेमोरी आकार बाइट्स की संख्या के रूप में प्रस्तुत किए जाते हैं।
सबसे largest_free और number_of_free टैग वर्तमान में केवल VxWorks सिस्टम पर लौटाए गए हैं।
अगर memsup उपलब्ध नहीं है, या स्मृति मेमोरी चेक आउट memsup है तो खाली सूची [] memsup है।
लिनक्स पर एमुलेटर के लिए उपलब्ध स्मृति cached_memory अलावा cached_memory और buffered_memory है।
वर्तमान चल रहे ऑपरेटिंग सिस्टम के शब्दकोष देता है।
आवधिक स्मृति जांच के लिए, मिलीसेकंड में, समय अंतराल देता है।
आवधिक स्मृति जांच के लिए मिनटों में दिए गए समय अंतराल को बदलता है।
परिवर्तन अगली मेमोरी जांच के बाद प्रभावी होगा और निरंतर है। यही है, प्रक्रिया को पुनरारंभ करने के मामले में, यह मान भुला दिया जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। उपरोक्त Configuration देखें।
प्रोसेस मेमोरी आवंटन के लिए, प्रतिशत में दहलीज देता है।
प्रोसेस मेमोरी आवंटन के लिए फ्लोट के रूप में दिए गए थ्रेसहोल्ड को बदलता है।
परिवर्तन अगली आवधिक स्मृति जांच के दौरान प्रभावी होगा और निरंतर है। यही है, प्रक्रिया को पुनरारंभ करने के मामले में, यह मान भुला दिया जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। उपरोक्त Configuration देखें।
सिस्टम मेमोरी आवंटन के लिए, प्रतिशत में दहलीज देता है।
सिस्टम मेमोरी आवंटन के लिए, फ्लोट के रूप में दिए गए थ्रेसहोल्ड को बदलता है।
स्मृति जांच के लिए, सेकेंड में, टाइमआउट मान देता है।
स्मृति जांच के लिए सेकंड में दिए गए टाइमआउट मान को बदलता है।
परिवर्तन अगली मेमोरी जांच के लिए प्रभावी होगा और निरंतर है। यही है, किसी प्रक्रिया को पुनरारंभ करने के मामले में, यह मान भुला दिया जाता है और डिफ़ॉल्ट मान का उपयोग किया जाएगा। उपरोक्त Configuration देखें।