क्या अदला-बदली है?


43

मैंने काफी समय तक यूनिक्स का उपयोग किया है, और पिछले कुछ वर्षों से मैंने महसूस किया है कि स्वैप एक ऐक्रोनरिज्म है, लेकिन मैं उत्सुक हूं कि अन्य लोग क्या सोचते हैं।

मेरा तर्क लगभग यही है (कोई वैश्विक अल्टीमेट या ओओएम सेटिंग्स की ट्विडलिंग मानते हुए):

There is little value in swap because if you need to swap out to disk, 
odds are it's going to be a vicious cycle where an app will continue 
to eat not only real memory, but swap as well until it gets OOM 
reaped (_if_ it gets OOM reaped). 

If you have swap enabled, it will only prolong this death march to 
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.

Without swap, it will probably get OOM reaped sooner (if at all)

प्रदर्शन के लिए ट्यून की गई किसी भी सेवा के लिए, मुझे लगता है कि इसके संसाधन उपयोग की ऊपरी सीमाओं को समझना पहली जगह में इसे ट्यूनिंग करने के लिए महत्वपूर्ण होगा, जिस स्थिति में आप जानते हैं कि आपको कितनी आवश्यकता है।

मैं कई स्थितियों की कल्पना नहीं कर सकता (कुछ, लेकिन कई नहीं) जहां आप एक चलने की प्रक्रिया को निलंबित कर देंगे और यह अन्य चीजों के लिए जगह बनाने के लिए स्वैप कर सकता है, लेकिन अगर आपने ऐसा किया, तो आप अपनी कुर्सियां ​​खो देंगे। जीसीआर के माध्यम से कोर-डंप या हाथ से मेमोरी को कॉपी करना कार्यात्मक रूप से समकक्ष होगा।

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

किसी भी यूनिक्स-दाढ़ी के पास स्वैप करने के लिए कोई सम्मोहक कारण हैं?

अद्यतन जवाब और& विश्लेषण:

  • की पुष्टि? - कांटा () को माता-पिता के रूप में बच्चे की प्रक्रिया के लिए समान मात्रा में स्मृति की आवश्यकता होती है

    POSIX (सामान्य रूप से) पर बच्चों के लिए आधुनिक कांटा () कॉपी-ऑन-राइट है , लेकिन विशेष रूप से लिनक्स और FreeBSD , और मैं एक्सआर एक्सट्रपलेशन द्वारा मान रहा हूं। मैं इसे एराक्रोनॉस्टिक सामान का हिस्सा मानता हूं जो स्वैप करता है।

    उत्सुकता से, यह सोलारिस लेख दावा करता है कि भले ही सोलारिस कॉपी-ऑन-राइट के साथ कांटा () का उपयोग करता है, कि आपके पास कम से कम 2x (!) फ़र्क के लिए मुफ्त वर्चुअल मेमोरी में मूल प्रक्रिया का आकार होना चाहिए () बाहर बकवास न करने के लिए! मध्य। जबकि सोलारिस तत्व कुछ हद तक इस तर्क का भंडाफोड़ करता है कि स्वैप एक अभिजनवाद है - मुझे लगता है कि पर्याप्त ऑपरेटिंग सिस्टम सीओडब्ल्यू को इस तरह से सही ढंग से लागू करते हैं कि यह मिथक को दूर करने के लिए अधिक महत्वपूर्ण है कि इसे स्वैप के लिए और औचित्य के रूप में चिह्नित किया जाए। जबसे। चलो सामना करते हैं। इस बिंदु पर जो लोग वास्तव में सोलारिस का उपयोग करते हैं, वे संभवतः ओरेकल लोग हैं। कोई अपराध नहीं सोलारिस!

  • पुष्ट - देता है जब tmpfs / ramfs भरता tmpfs / ramfs फ़ाइलें एक convienence के रूप में स्वैप करने के लिए जा सकते हैं

    नो-लिमिट tmpfs / ramfs का उपयोग न करें! हमेशा स्पष्ट रूप से राम की मात्रा को परिभाषित करें जिसे आप tmpfs / ramfs का उपयोग करना चाहते हैं।

  • PLAUSABLE - थोड़ा स्वैप करें 'बस के मामले में'

    मेरे पुराने मालिकों में से एक ने कहा था, 'तुम नहीं जानते कि तुम क्या नहीं जानते' - अनिवार्य रूप से, आप अभी तक आपके पास मौजूद जानकारी के आधार पर निर्णय नहीं ले सकते। यह मेरे लिए अदला-बदली का एक प्रशंसनीय तर्क है, हालाँकि - मुझे संदेह है कि आपके आवेदन की अदला-बदली हो रही है या नहीं, यह जानने के लिए कि आप किस प्रकार की चीज़ों का पता लगा रहे हैं, यह देखने के लिए भारी होगा कि क्या यह देखने के लिए कि क्या मॉलोक सफल होता है या अपवाद को पकड़ता है। एक नया विफल ()।

    यह उन मामलों में उपयोगी हो सकता है, जहां आप एक डेस्कटॉप चला रहे हैं और यादृच्छिक चीजों का एक गुच्छा है, लेकिन फिर भी - अगर कुछ पागल हो जाता है तो मैं इसे OOM होगा स्वैप-नरक में गोता लगाने की तुलना में। वो मैं ही हुं।

  • का पर्दाफाश! - पर सोलारिस , स्वैप है कारणों की एक जोड़ी के लिए महत्वपूर्ण

    tmpfs - बताता है कि tmpfs के लिए उपलब्ध रिक्त स्थान की मात्रा सिस्टम में अनलॉक्ड स्वैप स्थान की मात्रा पर निर्भर करती है। एक tmpfs फ़ाइल सिस्टम का आकार उसके द्वारा लिखी गई फ़ाइलों को समायोजित करने के लिए बढ़ता है, लेकिन tmpfs के भारी उपयोगकर्ताओं के लिए कुछ अंतर्निहित ट्रेडऑफ़ हैं। Tmpfs कार्यक्रमों के निष्पादन के डेटा और स्टैक सेगमेंट के साथ संसाधन साझा करता है। बहुत बड़े कार्यक्रमों का निष्पादन प्रभावित हो सकता है अगर tmpfs फाइल सिस्टम अपने अधिकतम स्वीकार्य आकार के करीब हो। Tmpfs सिस्टम के स्वैप स्पेस के सभी लेकिन 4MB को आवंटित करने के लिए स्वतंत्र है।

    स्वैप के बारे में सोलारिस तथ्य और मिथक - वर्चुअल मेमोरी में आज डिस्क पर भौतिक रैम और स्वैप स्थान का योग होता है। Solaris को किसी भी स्वैप स्थान की आवश्यकता नहीं होती है जिसे सभी में कॉन्फ़िगर किया जाना चाहिए। यदि आप इस विकल्प को चुनते हैं, तो एक बार RAM भर जाने के बाद, आप नई प्रक्रियाएँ शुरू नहीं कर पाएंगे।

    मैं अनिश्चित हूँ अगर इसका मतलब यह है कि आपके द्वारा बनाया गया अधिकतम वर्चुअल मैप ram + swap है , या यदि आप अभी भी कुछ कर सकते हैं जैसे कि mmap () RAM से बड़ी फ़ाइल है और mmap () के आलसी आरंभीकरण पर निर्भर है .. जबकि आप शायद स्वैप के बिना इन दिनों सोलारिस चला सकते हैं, ऐसा लगता है कि यह अन्य POSIXy ऑपरेटिंग सिस्टम की तुलना में इसके बारे में कम अनुकूल है।

  • का पर्दाफाश! लोकप्रिय लिनक्स हाइबरनेशन उपकरण स्वैप पर भरोसा करते हैं

    डिफ़ॉल्ट रूप से, TuxOnIce ऐसा लगता है जैसे यह हाइबरनेशन के लिए स्वैप पर निर्भर करता है - हालांकि अन्य बैकएंड मौजूद हैं। हालाँकि, यदि आप एक बॉक्स नहीं चला रहे हैं, जिसे हाइबरनेट करने की आवश्यकता है, तो मैं अभी भी इस कथन के पीछे खड़ा रहूँगा कि 'स्वैप ऑन लाइनॉक्स है'


मेरे पास बहुत * x दाढ़ी नहीं है (कुछ बाल अभी भी?), लेकिन मेरे 2 सेंट होंगे कि स्वैप के "बिट" होने से आपके सिस्टम को कुछ मजबूती मिलेगी। सीधे OOM के बजाय, आप इसके बजाय स्वैप करेंगे यदि आपके सिस्टम की सीमा से थोड़ा अधिक। यकीन है, अगर वास्तव में आपके सिस्टम की सीमा से अधिक है, तो आपका सिस्टम अंततः दुर्घटना / हॉल्ट / न्यूक-ही / जो भी नरक-आप-कल्पना कर सकता है। तो साथ खेलने के लिए थोड़ी रस्सी दे;)
Ouki

1
कांटा () के बारे में बात वास्तव में सच है यदि आप अपने सिस्टम को रैम को कभी भी ओवरकम करने के लिए सेट नहीं करते हैं (यह डिफ़ॉल्ट नहीं है)। अब आपको उस सेटिंग की आवश्यकता क्यों होगी, अब मेरा कोई सुराग नहीं है। यह realtime प्रसंस्करण के लिए उपयोगी नहीं है।
जोशुआ

@ जशुआ: ऑपरेटिंग सिस्टम के आधार पर मेमोरी ओवरकमिटमेंट डिफ़ॉल्ट या संभव नहीं भी हो सकती है।
jlliagre

मेरे पास 8GB रैम के साथ एक NAS सर्वर है, यह 2 VMs तक चलेगा। मैंने अदला-बदली नहीं की। यदि यह जोर से स्वैप करना शुरू कर देता है, तो यह वैसे भी पहले से ही मर चुका है। तो यह पूरी तरह से आपके तर्क का समर्थन करता है। दूसरी ओर, मैं अभी भी अपने जंग खाए हुए डेस्कटॉप का उपयोग 1GB रैम तक ही सीमित रखता हूं और विरल मेमोरी को संभालने के लिए मेरे पास स्वैप नहीं है। यह बात थोड़ी धीमी कर देता है लेकिन मुझे फ़ायरफ़ॉक्स और अन्य अनुप्रयोगों को एक ही समय में खोलने में मदद करता है।
ह्यूजेंस

मुझे लगता है कि OOM किलर बहुत देर से ट्रिगर करता है, केवल सभी कैश खाली हो जाने के बाद और सिस्टम सुस्त हो गया है। अपने सिस्टम को दुखी रखने के लिए, मैं एक ही काम करने के लिए शुरुआती या नोहंग का उपयोग करता हूं लेकिन पहले! स्वैप के साथ या बिना उपयोग किया जा सकता है।
joeytwiddle

जवाबों:


28

भ्रमित न करें () स्वैप (डिस्क क्षेत्र के रूप में) और (से) स्वैप (रैम से मेमोरी पेज को डिस्क और पारस्परिक रूप से स्थानांतरित करने की विधि के रूप में)।

अत्यधिक स्वैपिंग प्रदर्शन के कारणों से बचा जाना है, लेकिन स्वैप क्षेत्र होने के कारण यह समस्या नहीं है।

लिनक्स की तरह, सिस्टम में, जो कि मेमोरी को ओवरकम करता है, यानी कि प्रक्रियाओं को उपलब्ध से अधिक मेमोरी आवंटित करने की अनुमति देता है, स्थिति से निपटने के लिए पर्याप्त स्वैप नहीं होने के साथ रैम से बाहर निकलकर ओओएम किलर को ट्रिगर करेगा। आपको मारने के लिए "सही" प्रक्रिया का चयन करने के लिए उपयोग किए जाने वाले एल्गोरिथ्म पर भरोसा करना होगा, और आपकी एक या एक से अधिक प्रक्रियाओं को स्वीकार करने के लिए बिना ठीक से बंद किए जाने का मौका दिया जाना चाहिए। यहाँ एक प्रसिद्ध सादृश्य है जो यह बताता है कि क्यों OOM हत्यारा एक अच्छा विचार नहीं हो सकता है।

सोलारिस जैसी प्रणालियों पर, जो मेमोरी को ओवरकम नहीं करते हैं, यानी यह सुनिश्चित करते हैं कि मेमोरी मेमोरी हमेशा वर्चुअल मेमोरी द्वारा समर्थित है, चाहे रैम में या डिस्क पर, एक पर्याप्त स्वैप क्षेत्र का होना बिल्कुल आवश्यक है अन्यथा रैम का एक संभावित महत्वपूर्ण हिस्सा होगा व्यर्थ।


1
क्या आप सुनिश्चित हैं कि सोलारिस के बारे में बात अभी भी सच है? blogs.oracle.com/jimlaurent/entry/solaris_faq_myths_and_facts स्टेट्स: वर्चुअल मेमोरी में आज डिस्क पर फिजिकल रैम और स्वैप स्पेस का योग होता है। Solaris को किसी भी स्वैप स्थान की आवश्यकता नहीं होती है जिसे सभी में कॉन्फ़िगर किया जाना चाहिए। यदि आप इस विकल्प को चुनते हैं, तो एक बार RAM भर जाने के बाद, आप नई प्रक्रियाएँ शुरू नहीं कर पाएंगे। मुझे लगता है कि मैं देख रहा हूं कि आपकी बात क्या है - यदि आप स्वैप के बिना भौतिक राम की तुलना में कुछ बड़ा करना चाहते हैं तो आप नहीं कर सकते? (भले ही mmap एक आलसी इनिशियलाइज़र हो)।
सिंथेसाइजरपेटेल

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

1
लिनक्स के लिए अपडेट: ओवरकमिंग को बंद किया जा सकता है, ओओएम एल्गोरिथ्म को संशोधित किया जा सकता है, यहां तक ​​कि आप अपने खुद के ओओएम हैंडलर को भीग्रुप के साथ रख सकते हैं।
पीपरफ

1
@peterph लिनक्स पर ओवरकॉमिटिंग को बंद करने से स्वैप भी कम होता है। यदि आप ओवरकम नहीं करते हैं, तो आपको यह सुनिश्चित करना होगा कि आपके पास एक स्वैप क्षेत्र है जो सभी आरक्षणों के लिए पर्याप्त है।
जलीगेरे

1
एक कांटा द्वारा आरक्षित वर्चुअल मेमोरी इसे करने वाले कार्यक्रम के आकार पर निर्भर करती है। मान लें कि आपके पास 2 जीबी मेमोरी फोर्किंग का उपयोग करके जावा वीएम है, इसे अस्थायी रूप से 2 जीबी अधिक की आवश्यकता होगी। यदि ऐसा तब होता है जब आपके पास 2 जीबी उपलब्ध है या एक साथ कई बार, एक या अधिक कांटा विफल हो जाएगा। यह नॉन-ओवर-कमिंग ओएस के साथ एक सामान्य स्थिति है, और अक्षम होने पर भी लिनक्स के साथ। यह आसानी से एक स्वैप क्षेत्र होने से काफी हद तक तय किया जा सकता है जो कि IMHO मेमोरी ओवरकमिटमेंट की तुलना में काफी बेहतर समाधान है।
जलीगेरे

3

मैं चारों ओर स्वैप रखने का एक कारण जानता हूं। मेरे पास एक ऐसा ऐप है जो अपने सिस्टम के लिए कॉन्फ़िगर करने के लिए जितनी मेमोरी ले सकता है उतना ही लेता है। यह Hadoop का उपयोग करता है, जो प्रसंस्करण के एक हिस्से में एक एकल यूनिक्स कमांड चलाने के लिए एक कांटा और निष्पादित करता है (मुझे लगता है कि "uname" या "user" या ऐसा कुछ जो वे जावा के लिए बराबर नहीं पा सके)। ऐसा प्रतीत होता है कि जावा एक मूल अनुप्रयोग की तरह लेखन शब्दार्थ पर प्रतिलिपि के साथ एक vfork नहीं करता है। अगर मैं अपने ऐप को 4Gb RAM का उपयोग करके शुरू करता हूं, जब वह कांटा लगाता है, तो कांटा एक और 4Gb RAM का उपयोग करता है, लेकिन फिर उसे तुरंत रिलीज़ करता है। अगर मेरे पास उस Hadoop के लिए स्वैप करने के लिए 4Gb का स्वैप नहीं है, तो मुझे 8Gb की रैम के लिए भुगतान करना होगा बस अपने ऐप के लिए 4Gb होना चाहिए।


यह एक शानदार बिंदु है, लेकिन आधुनिक कांटे का प्रतिबिंब नहीं है () - लिनक्स और फ्रीबीएसडी पर (और, आमतौर पर ओएसएक्स?) कांटा () कॉपी-ऑन-राइट पृष्ठों के उपयोग के माध्यम से लागू किया गया है। कॉपी-ऑन-राइट (या गाय) डेटा की प्रतिलिपि को रोकने या पूरी तरह से रोकने की एक तकनीक है। प्रक्रिया पता स्थान को डुप्लिकेट करने के बजाय, माता-पिता और बच्चा एक प्रति साझा कर सकते हैं। हालाँकि, डेटा को इस तरह से चिह्नित किया जाता है कि यदि इसे लिखा जाए, तो एक डुप्लिकेट बनाया जाता है और प्रत्येक प्रक्रिया को एक अद्वितीय प्रतिलिपि प्राप्त होती है। उद्धरण: मंचों .freebsd.org / showthread.php ? t=26355 और कांटे के लिए लिनक्स मैनपेज ()
सिंथेसाइजरटेल

जबकि सच है, कुछ पृष्ठ हैं जिन्हें चिह्नित नहीं किया जा सकता है। उदाहरण के लिए, पृष्ठों नए बच्चे की प्रक्रिया के कर्नेल ढेर और आंतरिक डाटा संरचनाओं (के लिए इस्तेमाल किया पृष्ठों के लिए इस्तेमाल किया files_struct, struct signals, task_struct, और अन्य)। साथ ही, कई निष्पादन योग्य पृष्ठ स्थिति-निर्भर कोड (PIC) नहीं होते हैं और इस प्रकार निष्पादन योग्य कोड के पृष्ठ जिन्हें डायनेमिक लोडर ( ld-linux.so) द्वारा संशोधित किया गया है , उनके लिए स्वैप स्थान आरक्षित होना चाहिए, भले ही कुछ भी तुरंत स्वैप स्थान के लिए न लिखा हो। इसलिए मैं लिनक्स से प्यार करता हूं; आप स्वैप को बंद कर सकते हैं और सिस्टम अभी भी चलता है। :)
अज़रेई

3

मैं तकनीकी रूप से चर्चा में शामिल नहीं हो सकता, लेकिन मैं कुछ उदाहरण दे सकता हूं। मेरी पुरानी नोटबुक (2 जीबी रैम कुनबंटु ल्यूसिड) आमतौर पर 0. स्वैप पर चलती है। जब मैं कई टोरेंट्स के साथ ट्रांसमिशन (बिटटोरेंट क्लाइंट) चलाता हूं, जो 100 कनेक्शन का सामूहिक रूप से उपयोग कर सकते हैं, तो मेरा स्वैप ऊपर जा सकता है। यह और भी बदतर हो जाता है जब मेरे पास एक XP वीएम चल रहा है जो 1 जीबी वास्तविक मेमोरी का उपयोग करता है।

मैंने दूसरों को टिप्पणी करते हुए देखा है कि ग्राफिक्स की तरह स्मृति गहन प्रक्रियाएं भी स्वैप में डुबकी लगा सकती हैं। यदि आप केवल कभी-कभार ऐसा करते हैं, तो यह कोई मुद्दा नहीं है।

जहां तक ​​ओओएम की समस्याएं हैं, स्वैप वास्तव में एक जीवनरक्षक हो सकता है क्योंकि यह आपको दक्षिण की ओर जाने वाली समस्या और चीजों की पहचान करने के बीच का समय देता है। बहुत सारी चीजें मेरी लगभग सभी मेमोरी का उपयोग करती हैं, इसलिए मैं उस पर कोई ध्यान नहीं देता, लेकिन जब स्वैप चलने लगता है तो मैं नोटिस करता हूं और समस्या की तलाश शुरू करता हूं - इससे पहले कि वह मुझे काट ले।


ठीक है, हां, स्वैप सिस्टम सक्षम किए बिना बहुत कुछ नहीं कर सकता। मेरे पास अभी भी 256MB RAM वाला एक पुराना सबनोटबुक है, जहाँ किसी भी प्रोग्राम को शुरू करने के लिए स्वैप को दोबारा शुरू किया जाता है। मेरा मानना ​​है कि प्रश्न आधुनिक प्रणालियों को लक्षित करता है।
दिमित्री ग्रिगोरिवे

3

स्वैप स्पेस के लिए एक बहुत ही अच्छा एप्लिकेशन है: स्टोरेज डिवाइस पर स्वैप स्पेस लगाकर रैम का विस्तार, जो रैम का उपयोग करता है, इंस्टाल करने योग्य रैम की सीमाओं को दूर करने के लिए

इस गैजेट पर एक नज़र डालें http://techreport.com/articles.x/16255 यह मूल रूप से S-ATA से DDR2-RAM तक का इंटरफ़ेस है। आप उन में 64GB तक रैम भर सकते हैं। उन में से एक पर स्वैप स्थान रखकर आप कुछ महत्वपूर्ण अतिरिक्त रैम प्राप्त कर रहे हैं। बेशक यह रेगुलर सिस्टम रैम जितना तेज नहीं है। लेकिन यह सिस्टम रैम को अतिरिक्त कैश लेयर की तरह बदल देता है।


1
इसकी कीमत ($ 549) को ध्यान में रखते हुए 64 जीबी रैम का समर्थन करने वाले मेनबोर्ड में $ 100 का निवेश करना अधिक कारगर नहीं होगा ?
दिमित्री ग्रिगोरीव सेप

1
@DmitryGrigoryev: बिल्कुल। लेकिन कभी-कभी आपको उस विशेष प्रकार के हार्डवेयर का उपयोग करने के लिए मजबूर किया जाता है (क्योंकि कारणों से खांसी चिकित्सा प्रणाली प्रमाणन खाँसी ) लेकिन बहुत कम समय में उत्पादित हास्यास्पद बड़े डेटासेट से भी निपटना पड़ता है (सोचिए टोमोग्राफी स्कैनर, डेटारेट्स> 3GiB / s)।
डेटेनवॉल्फ

क्या आपको रैम ड्राइव को चिकित्सा उपकरण के रूप में प्रमाणित नहीं करना होगा? ;) लेकिन हाँ, मुझे बात मिल गई।
दिमित्री ग्रिगोरीव

1
@DmitryGrigoryev: वास्तव में आपको यह करना होगा। हालाँकि ऐसे S-ATA RAM डिस्क डिवाइस को प्रमाणित करना पूरे मेनबोर्ड को प्रमाणित करने की तुलना में बहुत आसान है। जब चिकित्सा उपकरणों में उपयोग किए जाने वाले कंप्यूटरों के लिए सोर्सिंग आप आमतौर पर संभव प्रमाणित ऑफ-द-शेल्फ के रूप में अधिक से अधिक घटकों को खरीदते हैं। उन हिस्सों के लिए जहां प्रमाणिकता के साथ कुछ भी आसानी से उपलब्ध नहीं है, आप आवश्यक परीक्षण और प्रमाणीकरण स्वयं करते हैं। विशेष रूप से अनुसंधान में काम करते समय, जहां रोगी सुरक्षा पर जोर दिया जाता है और उपचार योजना के लिए डेटा का उपयोग नहीं किया जाता है, यह सबसे प्रभावी और त्वरित समाधान है। बीटी, डीटी।
डेटेनवॉल्फ

3

मैं 4 जी या अधिक के साथ नोटबुक / डेस्कटॉप पर स्वैप (पेजिंग फ़ाइल, विंडोज नामकरण में) के बिना लिनक्स और विंडोज चला रहा हूं । कुछ अवसर होते हैं जब मेमोरी थकावट होती है, मैं उनसे निपटता हूं। मुझे लगता है कि सिस्टम इस तरह से तड़क रहा है, जिसकी मुझे ज्यादा परवाह है। हालांकि मेरे कार्यभार पर कोई विशेष आवश्यकता नहीं है।

मैंने जो कुछ सीखा है:

  • विंडोज समय के साथ, लगभग 20-30 दिनों के अपटाइम में मेमोरी खो देता है, जब मैं सिर्फ रिबूट करना पसंद करता हूं तो मुझे एक बिंदु मिलता है। मुझे नहीं पता कि ऐसा क्यों होता है। मैं अनुमान लगा रहा हूं कि यह किसी ड्राइवर या एंटी-वायरस में रिसाव हो सकता है। जब आपके पास एक पेजिंग फ़ाइल होती है, तो मेरा मानना ​​है कि यह इस लीक हुई मेमोरी को पेजिंग फ़ाइल में डाल सकती है, इसलिए इस मुद्दे को नियमित विंडोज सिस्टम पर नोटिस करना कठिन होगा।
  • फ़ायरफ़ॉक्स सौदे क्रोम की तुलना में बहुत कम मेमोरी के साथ बेहतर होते हैं। फ़ायरफ़ॉक्स आपको चेतावनी देता है, और अभी भी चलता है, क्रोम बस दुर्घटनाग्रस्त हो जाता है।

2

मुझे लगता है कि आपके तर्क एक सर्वर के लिए काफी मान्य हैं , जहां प्रदर्शन महत्वपूर्ण है, और यह जानना कि कौन सा ऐप आगे कार्य करेगा, पूर्वानुमान नहीं हो सकता है।

एक डेस्कटॉप के लिए , हालांकि, जब मैं पुश और पॉपिंग कार्यों को कर रहा हूं तो मुझे स्वैप उपयोगी लगता है।

उदाहरण के लिए, यदि मैं ऐप का उपयोग करते हुए किसी कार्य पर काम कर Aरहा हूं और तब मुझे पता चलता है कि मुझे Bकिसी चीज़ के लिए ऐप का उपयोग करने की आवश्यकता है (या तो एक उप-कार्य, या एक रुकावट), तो मेरे लिए मानसिक रूप से आसान है कि Aमैं काम करते समय डिस्क को स्वैप करूं में Bबंद करने के लिए Aऔर फिर बाद में इसे फिर से शुरू करने के लिए याद है।

यह विशेष रूप से सच है अगर Aकुछ बिना सहेजे हुए स्थिति को पकड़ लिया जाता है, जो दोबारा शुरू होने पर बहाल नहीं होगा।

चाहे वह स्वैग से धक्का देना और खींचना Aहो या बंद करना हो या फिर उसे बंद करना हो, ऐप पर निर्भर करता है। (कुछ एक धीमी गति से स्टार्टअप करने के लिए लेकिन एक छोटे आवासीय आकार का प्रबंधन करते हैं।)

हालाँकि मैं इस बात से सहमत हूँ कि उत्पादकता बढ़ाने का एक बेहतर उपाय कुछ अतिरिक्त रैम स्थापित करना होगा।


अद्यतन: इस उत्तर को लिखने के बाद, मेरे पास बहुत से रैम और धीमी गति से हार्ड ड्राइव वाला एक लैपटॉप है। उस मामले में मेरी सलाह उलट गई! यहाँ पेशेवरों और विपक्षों का सारांश दिया गया है
joeytwield

1

मेरे सिस्टम पर, / tmp अगर यह बहुत ज्यादा RAM gobbles करता है तो स्वैप करने के लिए फैलता है।

यह / tmp के लिए एक वास्तविक फाइल सिस्टम का उपयोग करने से बहुत तेज है।


यह बहुत खतरनाक है - अगर मुझे रैमफ्स की आवश्यकता है, तो मैं स्पष्ट रूप से आकार सेट करने के लिए fstab (या विकल्प) में निर्दिष्ट करता हूं। यह सिर्फ इस बात की संभावना है कि एक प्रोग्राम मेमोरी आवंटन के साथ एप-क्रैप पागल हो सकता है क्योंकि यह है कि यह / tmp में फाइल बनाना शुरू कर देगा। स्वैप फ़ाइलों को दिखाने के लिए एक बुरी जगह होगी (विशेषकर यदि आप गति के लिए रैमफ्स पर भरोसा कर रहे हैं)
सिंथेसाइपरटेल

2
मैं वहाँ अक्सर RAM आकार से अधिक है। स्वैप द्वारा समर्थित tmpfs स्पिलिंग करते समय भी ext2 की तुलना में काफी तेज है।
जोशुआ

जानने के लिए उपयोगी है - और संभवत: भविष्य में देखने के लिए एक शोध आइटम होगा - मैं अभी भी एक आवेदन के बारे में चिंतित रहूंगा जो मेरे राम को tmpfs / ramfs के / tmp के प्रॉक्सी द्वारा भर रहा है। यह मुझे हेबी जीइज़ देता है!
सिंथेसाइजरपटेल

फिर स्वैप की सीमा = आकार निर्धारित करें।
जोशुआ

संयोग से, यह रैम्फ और टैम्पफ के बीच का अंतर है। Tmpfs स्वैप करने के लिए फैल सकता है जबकि ramfs नहीं कर सकता।
जोशुआ

1

जब स्वैप का उपयोग किया जाता है, तो बहुत सारे कारण होते हैं।

आमतौर पर, जब सिस्टम में पर्याप्त भौतिक मेमोरी नहीं होती है, तो कर्नेल स्वैप करने के लिए कुछ एप्लिकेशन (वास्तव में - मेमोरी के कुछ हिस्से जिनका उपयोग एप्लिकेशन नहीं चलाकर किया जाता है) कर सकता है।

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

स्वैप उपयोग का एक और उदाहरण डिस्क के लिए निलंबित है।

एम्बेडेड उपकरणों के बारे में, उन सभी को दो बड़े समूहों में विभाजित किया जा सकता है:

  1. वे लिनक्स / विंडोज या इसी तरह के गैर-आरटीओएस (रियल टाइम ओएस) चलाते हैं; या
  2. वे एक RTOS चलाते हैं।

बेशक, कुछ कोड (कुछ प्रकार के माइक्रोकंट्रोलर) आदि चलाने वाले उपकरण हैं, मैं उनका वर्णन नहीं करूंगा क्योंकि ऐसे उपकरणों में कोई ओएस नहीं है, इसलिए ऐसे उपकरणों के लिए स्वैप पर चर्चा करना बेकार है।

एम्बेडेड उपकरणों का पहला समूह (कुछ ओएस चला रहा है) स्वैप का उपयोग कर सकता है (और आमतौर पर वे उपयोग करते हैं)। और सामान्य तौर पर, ऐसे उपकरण डेस्कटॉप और सर्वर के समान स्वैप का उपयोग करते हैं।

उपकरणों का दूसरा समूह (RTOS चल रहा है) स्वैप का उपयोग बिल्कुल भी न करें, क्योंकि RTOS को समय पर घटना और इस पर प्रतिक्रिया देने की सीमा होती है

  • स्वैप से पढ़ना अप्रत्याशित समय ले सकता है
  • उपकरणों में एक पूर्वनिर्धारित (संकलन समय पर) कार्यों की संख्या है जो स्वैप करना आवश्यक नहीं है

BTW, लिनेक्स स्वैप का उपयोग कैसे करते हैं, इसका एक बहुत विवरण है, उनमें से एक http://distilledb.com/blog/archives/date/2009/02/22/swap-files-in-linux.page
विंडोज उपयोग है एक समान दृष्टिकोण।


इसके अलावा, हाइबरनेशन (डिस्क को सस्पेंड) के लिए स्वैप की आवश्यकता होती है, जब तक कि आप TuxOnIce जैसी किसी चीज का उपयोग नहीं कर रहे हैं।
रेनैन

1

यह मुझे लगता है कि दोनों हाइबरनेशन और हाइब्रिड नींद लिनक्स पर स्वैप स्पेस की आवश्यकता है

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


0

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

स्वैप के बारे में मैंने जो दूसरी व्याख्या की है, वह कुछ हद तक साथ-साथ चलती है: "आपको कहा जाता है कि आप हमेशा SWAP = 2 * RAM को कॉन्फ़िगर करें। यह पूरी बकवास है, रैम और स्वैप के बीच कोई संबंध नहीं है। स्‍पैप को स्‍मृति उपयोग में स्पाइक्स को समायोजित करना है , आपको पर्याप्त मेमोरी जोड़ना चाहिए ताकि आपका लोड रैम में फिट हो जाए। यदि आपका लोड स्थिर है, तो आपको स्वैप की आवश्यकता नहीं है। यदि आपका लोड अत्यधिक परिवर्तनशील है, तो आपको स्पाइक्स के लिए पर्याप्त स्वैप की आवश्यकता है, और व्यवस्था करें ताकि स्वैप का उपयोग शायद ही कभी किया जाता है ताकि समग्र रूप से प्रदर्शन पर प्रभाव न पड़े। संक्षेप में, आपको पता नहीं है कि आपके लोड स्पाइक्स क्या हैं, और चूंकि डिस्क रैम की तुलना में बहुत सस्ती है, इसलिए SWAP = 2 * RAM को कॉन्फ़िगर करें। "

Solaris के कुछ पुराने संस्करण तब तक स्वैप का उपयोग नहीं कर सकते थे जब तक कि कम से कम RAM जितनी स्वैप नहीं थी (मुझे याद है कि उसने RAM या उस जैसी चीज़ के लिए निश्चित स्वैप स्थान आवंटित किया था), इसलिए 2 * RAM वास्तव में न्यूनतम समझदार के आसपास थी मूल्य। लेकिन यह बात बहुत पहले की है, जब हमारी बड़ी मशीन में 64 MiB RAM और 1 GiB डिस्क थी ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.