डिस्क से / के लिए एकल प्रक्रिया को निलंबित / फिर से शुरू करें


22

इस अवसर पर, हम अपने Ubuntu और OS X सर्वर पर मेमोरी-इंटेंसिव प्रक्रियाओं को निलंबित करना चाहते हैं ताकि अस्थायी रूप से अन्य नौकरियों के लिए कुछ रैम को खाली कर सकें। अगर हम सभी सीपीयू के उपयोग के बारे में चिंतित थे, तो एक सरल Ctrl-Zकाम करेगा। हालाँकि, हमें रैम को खाली करने में सक्षम होना चाहिए (इसे डिस्क पर लिखकर) और फिर प्रक्रिया (डिस्क -> रैम) या दूसरे शब्दों में एकल प्रक्रिया को "हाइबरनेट" करें। यह कैसे करना है पर कोई सुराग? (अधिमानतः सीएलआई से।) धन्यवाद


7
मुझे लगता है कि जब एक प्रक्रिया एक निलंबित स्थिति में होती है, तो इसकी उपयोग की गई मेमोरी डिस्क के लिए स्वैप की जाती है, यदि आवश्यक हो, और यह कर्नेल से स्वचालित रूप से किया जाना चाहिए।
enzotib

1
@enzotib - अगर यह होता है और मुझे नहीं पता, सिद्धांत में, यह अच्छा लगता है। हालाँकि, मैंने अभी एक मोटा परीक्षण किया है और व्यवहार में यह काम नहीं करता है। 'रैम खाने वालों' को निलंबित किए जाने के दौरान कोई भी नई प्रक्रिया शुरू की गई है, यह बेहद सुस्त है और मैं ऐसी किसी भी डिस्क गतिविधि का पता नहीं लगाता, जिसकी उम्मीद होगी कि अगर रैम को डिस्क में स्वैप किया जा रहा है।
माइक कोविंगटन

1
@frozenwithjoy मैं पुष्टि कर सकता हूँ कि ऐसा होता है। एकमात्र कारण जो मैं सोच सकता हूं कि एक निलंबित प्रक्रिया को धीरे-धीरे अदला-बदली नहीं किया जाएगा यदि यह अप्राप्य मेमोरी (बहुत दुर्लभ, और (ज्यादातर) रूट के लिए आरक्षित है) का अनुरोध किया जाता है, या यदि यह मैपिंग की गई मेमोरी को किसी अन्य, सक्रिय प्रक्रिया के साथ साझा किया जाता है ।
गिलेस एसओ- बुराई को रोकना '

1
एक शब्द जो यहाँ मदद कर सकता है वह है "चेकपॉइंटिंग" (हाँ, एक बदसूरत क्रिया-रूप)। यह आम तौर पर एक कठिन समस्या है क्योंकि कार्यक्रम कुछ संसाधनों का उपयोग कर सकता है जो राज्य को बदल सकते हैं जबकि कार्यक्रम सो रहा है। उस समस्या को प्रबंधित करना बिग आयरन और थोड़े फ़िडली कंप्यूटरों के बीच एक अंतर है।
dmckee

जवाबों:


8

किसी एकल प्रक्रिया को हाइबरनेट करने के लिए कोई सामान्य सुविधा नहीं है, केवल पूरी प्रणाली है।

हालाँकि, यदि आप इस बात की परवाह नहीं करते हैं कि प्रक्रिया छवि एक रिबूट से बच नहीं पाएगी, तो प्रक्रिया छवि को डिस्क पर स्वैप करने के लिए एक अंतर्निहित सुविधा है। सुनिश्चित करें कि आपके पास पर्याप्त स्वैप स्थान है, और यदि मेमोरी दबाव है और प्रक्रिया सक्रिय नहीं है (उदाहरण के लिए क्योंकि यह निलंबित है), तो इसकी मेमोरी को स्वैप किया जाएगा।

यदि आप जानते हैं कि प्रक्रिया लंबे समय तक निष्क्रिय रहने की संभावना है और आपको किसी बिंदु पर तेजी से प्रतिक्रिया समय की आवश्यकता है, तो आप बहुत सी रैम को एक में आवंटित करके रैम को मुक्त करने के लिए बाध्य कर सकते हैं छोटी अवधि की प्रक्रिया, उदाहरण के लिए

perl -e '$tmp = "a" x 999999999' # allocate about 1GB

आपको जो बाहर स्वैप हो जाता है, उस पर कोई नियंत्रण नहीं है, इसलिए अन्य प्रक्रियाएं अदला-बदली हो सकती हैं। लिनक्स पर, आप उन पेजों पर जबरन प्रवेश कर सकते हैं, जिन पर वे नक्शे हैं। इस उत्तर में स्क्रिप्ट ऐसा करेगी: एक प्रक्रिया द्वारा मैप किए गए सभी पृष्ठों को मेमोरी में लोड करें (ध्यान दें कि इसमें खुली फाइलें शामिल हैं; आप डेटा की अदला-बदली से बचने के लिए मानचित्र जानकारी के आधार पर चुनिंदा क्षेत्रों का पता लगा सकते हैं, जिनकी आपको आवश्यकता नहीं होगी। , अधिक जानकारी के लिए यह उत्तर देखें)।


13

आप जिस शब्द की तलाश कर रहे हैं, वह " एप्लिकेशन चेकपॉइंटिंग " है।

उपकरण जो मुझे पता है कि क्रायोपीआईडी ​​और क्रायोपीआईडी ​​2 हैं

दोनों उपकरण केवल लिनक्स के लिए हैं।

मैं बीएसडी या ओएस एक्स के लिए एक समान उपकरण नहीं जानता।


2
उपयोग करने के लिए एक और ऐप DMTCP है: dmtcp.sourceforge.net
हिरण हंटर

5

सुनिश्चित करें कि आपके पास स्वैप स्थान बहुत है। सुनिश्चित करें कि आपका सिस्टम निष्क्रिय पृष्ठों ( vm.swappiness = 100 ) को स्वैप करना पसंद कर रहा है । फिर प्रक्रिया को निलंबित करने के लिए पर्याप्त होना चाहिए। कर्नेल निष्क्रिय पृष्ठों को बाहर स्वैप करना पसंद करेगा।


-1

मैक ओएस एक्स पर आप purgeकुछ (निष्क्रिय) रैम को खाली करने के लिए कमांड (एक्सकोड के साथ प्रदान) का उपयोग करने का प्रयास कर सकते हैं ।

vm_stat
purge
vm_stat

2
purgeयहाँ मदद नहीं करेगा। यह डिस्क कैश को हटा देता है, लेकिन इससे प्रक्रिया की मेमोरी को स्वैप नहीं किया जा सकेगा, और यह रैम प्राप्त करने के लिए किसी अन्य प्रक्रिया के लिए तेज़ नहीं करेगा।
गिल्स एसओ- बुराई को रोकना '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.