लालची अनुप्रयोगों के लिए मेमोरी सीमित समाधान जो ओएस को क्रैश कर सकते हैं?


32

मैं अपने कंप्यूटर का उपयोग वैज्ञानिक प्रोग्रामिंग के लिए करता हूं। इसमें एक 8GBरैम और 12GBस्वैप स्पेस है। अक्सर, जैसा कि मेरी समस्याएं बड़ी हो गई हैं, मैं सभी उपलब्ध रैम से अधिक हूं। दुर्घटनाग्रस्त होने के बजाय (जिसे प्राथमिकता दी जाएगी), ऐसा लगता है कि उबंटू स्वैप में सब कुछ लोड करना शुरू कर देता है, जिसमें एकता और किसी भी खुले टर्मिनल शामिल हैं। अगर मैं समय-समय पर रन-वे प्रोग्राम को नहीं पकड़ता हूं, तो कुछ भी नहीं है जो मैं कर सकता हूं लेकिन प्रतीक्षा करें - कमांड प्रॉम्प्ट जैसे स्विच करने में 4-5 मिनट लगते हैं। Ctrl-Alt-F2जहां मैं आपत्तिजनक प्रक्रिया को मार सकता हूं।

चूंकि मेरी अपनी मूर्खता इस मंच के दायरे से बाहर है, इसलिए जब मैं किसी एकल ऑफ़ेंडिंग प्रोग्राम से सभी उपलब्ध मेमोरी का उपयोग करता हूं, तो मैं उबंटू को थ्रैशिंग के माध्यम से दुर्घटनाग्रस्त होने से कैसे रोक सकता हूं?

घर में प्रयोग *!

एक टर्मिनल खोलें, लॉन्च करें pythonऔर यदि आपने numpyइंस्टॉल किया है तो यह कोशिश करें:

>>> import numpy
>>> [numpy.zeros((10**4, 10**4)) for _ in xrange(50)]

* चेतावनी: प्रतिकूल प्रभाव पड़ सकता है, समय के माध्यम से iotopया topइसे मारने के लिए प्रक्रिया की निगरानी करें । यदि नहीं, तो मैं आपको अपने रिबूट के बाद देखूंगा।

जवाबों:


21

निर्मित शेल ulimitआपको संसाधनों को प्रतिबंधित करने की अनुमति देता है। आपके मामले के लिए, शेल (और उसके बच्चों) में मेमोरी उपयोग को सीमित करने के लिए उपयोग करें ulimit -v

100 एमबी (100000 KB) की मेमोरी लिमिट सेट करने का प्रदर्शन:

$ ulimit -v
unlimited
$ python -c '[ "x" * 100000000 ]'
$ ulimit -v 100000
$ python -c '[ "x" * 100000000 ]'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
MemoryError

यह देखते हुए ps uww -C script-name-hereकि अजगर को कम से कम 29MB मेमोरी (VSZ कॉलम) की आवश्यकता होती है। आरएसएस की सीमा बढ़ती है क्योंकि आपके पाइथन लिपि को अधिक मेमोरी की आवश्यकता होती है इसलिए उस कॉलम को अनुकूलित करें।


1
बहुत बुरा हम नहीं जानते कि वास्तविक ऐप कैसा दिखता है। प्रदर्शन के रूप में अलिमेट सभी प्रक्रियाओं को प्रभावित करता है जो उस शेल के बच्चे हैं। हम यह भी नहीं जानते हैं कि क्या यह एक डेमॉन के रूप में चलता है, या यदि इसमें बहुत सारे बच्चे हैं जो चीजों को और जटिल करेंगे। देखें coldattic.info/shvedsky/pro/blogs/a-foo-walks-into-a-bar/posts/...
ppetraki

1
क्या एलिमिट और सीग्रुप्स के लिए कोई उपयोगकर्ता-अनुकूल फ्रंट-एंड नहीं है ? विंडोज में, जब ओएस रैम से बाहर चलने के करीब हो जाता है, तो एक चेतावनी पॉप-अप ने मुझे हमेशा सिस्टम फ्रीज से बचने में सक्षम किया है। उबंटू में, क्या मुझे हर समय मेमोरी के उपयोग पर नजर रखनी है?
दान डैस्कलेस्क्यू

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

12

Cgroups को आपको प्रति प्रक्रिया के आधार पर अपने मेमोरी उपयोग को सीमित करने देना चाहिए।

https://en.wikipedia.org/wiki/Cgroups

http://www.mjmwired.net/kernel/Documentation/cgroups/memory.txt

वैज्ञानिक कंप्यूटिंग कुख्यात स्मृति गहन है, अपने ऐप को एक cgroup में सैंडबॉक्सिंग करके, बाकी प्रक्रियाएं पीड़ितों के रूप में नहीं होनी चाहिए क्योंकि स्मृति दबाव कम हो जाएगा।

वैकल्पिक रूप से, एक वीएम का उपयोग एक कठिन सीमा के रूप में किया जा सकता है, क्योंकि ऐप केवल वर्चुअल मशीन को दिए गए मेमोरी का उपयोग कर सकता है, बिल्कुल कोर्स के प्रदर्शन की कीमत पर। हालांकि एक VM एक ungitiated के लिए कॉन्फ़िगर करने के लिए जब एक cgroup की स्थापना और बनाए रखने की तुलना में बहुत आसान है।

निर्णय निर्णय :) शुभकामनाएँ!


1
क्या एलिमिट और सीग्रुप्स के लिए कोई उपयोगकर्ता-अनुकूल फ्रंट-एंड नहीं है? विंडोज में, जब ओएस रैम से बाहर चलने के करीब हो जाता है, तो एक चेतावनी पॉप-अप ने मुझे हमेशा सिस्टम फ्रीज से बचने में सक्षम किया है। उबंटू में, क्या मुझे हर समय मेमोरी के उपयोग पर नजर रखनी है?
दान डैस्कलेस्क्यू

नहीं। इसके अलावा आपका ओएस या तो ठंड नहीं होना चाहिए, यह एक अलग समस्या है। विंडोज़ पॉप अप के साथ शुरू करने के लिए सिर्फ एक बैंडेड है। यदि आप टन मेमोरी का उपयोग कर रहे हैं तो शायद आपको जांच करनी चाहिए कि क्यों? उदाहरण के लिए, उनके सैन्बॉक्सिंग वाले आधुनिक ब्राउज़र आसानी से 70-150M प्रति TAB का उपभोग कर सकते हैं। इसे बंद या ट्यूनिंग करने से यह अंत उपयोगकर्ता द्वारा नियमित रूप से उपयोग की जाने वाली पर्याप्त मेमोरी को मुक्त कर सकता है। अनुसूचियों को अंतरिक्ष को बचाने के लिए शायद ही कभी इस्तेमाल किए जाने वाले कार्यक्रमों की अदला-बदली करनी होती है, लेकिन यदि वे अधिक से अधिक जागते हैं, तो आपको उन्हें ठीक करने की आवश्यकता होती है, या यदि आपका प्राथमिक कार्य स्मृति गहन (वेब) है, तो अधिक राम की आवश्यकता है।
पितरकी

8
मुझे पता है कि मेमोरी की खपत क्या है - क्रोम। लेकिन ओएस को उन अनुप्रयोगों के खिलाफ अपनी स्थिरता की रक्षा करनी चाहिए जो अभी भी एमोक चलाते हैं।
डैन डस्केल्सस्कु

1
मैं समझता हूं कि आप उपयोगकर्ता के रूप में कहां से आ रहे हैं। हालाँकि जो आप पूछ रहे हैं उसका मतलब है कि एक सामान्य कंप्यूटिंग प्लेटफ़ॉर्म को एक उपकरण में बदलना। कम से कम जटिल (त्रुटि प्रवण) विधि के रूप में एक ऑपरेटिंग सिस्टम इंजीनियर को यह सुनिश्चित करने के लिए लागू करना चाहिए कि उन सुरक्षा उपायों को पूरा कंप्यूटर कैसे चलाया जाता है, इस पर नाटकीय रूप से विचार करने के लिए निर्णय लेना है। यह आमतौर पर अंत उपयोगकर्ता लचीलेपन की कीमत पर आता है। आप टैबलेट कंप्यूटिंग में इसके उदाहरण देखते हैं। हालांकि डेस्कटॉप में लचीलापन संरक्षित है।
प्रेट्रकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.