Kswapd0 बिना स्वैप के कंप्यूटर पर क्यों चल रहा है?


21

मेरे पास ~ 14G RAM वाला कोई क्लाउड सर्वर है और कोई स्वैप नहीं है। हालाँकि, मैं कभी-कभार kswapd0 को कुछ सीपीयू को उठाते हुए देखता हूँ top। अगर इसे प्रबंधित करने के लिए कोई स्वैप स्थान नहीं है, तो kswapd0 आखिर क्यों चलेगा?

जवाबों:


8

यह अभी भी जाँच करने के लिए एक प्रक्रिया है कि क्या कोई स्वैप है। इसे कम करने के लिए, आपको अपना स्वैग सेट करना होगा -

रूट के रूप में "/etc/sysctl.conf" संपादित करें, फिर बदलें (या जोड़ें)

vm.swappiness = 0

3
ठीक है, लेकिन यह मेरे सीपीयू के 1% का उपयोग क्यों कर रहा है?
portforwardpodcast

2
यदि kswapd0कोई सीपीयू ले रहा है और आपके पास स्वैप नहीं है, तो सिस्टम लगभग रैम से बाहर है और निष्पादनयोग्य से पृष्ठों की अदला-बदली करके स्थिति से निपटने की कोशिश कर रहा है। काम फिक्स को कम करने के लिए सही फिक्स है, स्वैप जोड़ें (अधिमानतः) अधिक रैम स्थापित करें। स्वैप जोड़ने से प्रदर्शन में सुधार होगा क्योंकि कर्नेल में डिस्क को स्वैप करने के लिए अधिक विकल्प होंगे । स्वैप के बिना कर्नेल को व्यावहारिक रूप से अनुप्रयोग कोड स्वैप करने के लिए मजबूर किया जाता है।
मिको रानाल्टेनन

यदि आप स्वैप सक्षम हैं और kswapd0कुछ सीपीयू का उपयोग कर रहे हैं और आप ऐसा नहीं चाहते हैं, तो swappinessसेटिंग कम करें । हालांकि, जब तक कि आपके स्वैप को SSD द्वारा समर्थित नहीं किया जाता है जो कि लेखन से ग्रस्त है (जैसे खराब वियर लेवलिंग एल्गोरिथ्म), swappinessसिस्टम के अधिकतम प्रदर्शन को कम करता है। स्वैग में रैम की एक कॉपी रखने के लिए विचार यह है कि अधिक रैम की जरूरत है - उस स्थिति में रैम में कॉपी को तुरंत स्वैप करने के बजाय दूर फेंक दिया जाता है ताकि रैम का उपयोग करने से पहले ही बाहर निकाल दिया जा सके। यह आशावादी अदला-बदली केवल तब की जाती है जब सिस्टम पर्याप्त निष्क्रिय होता है इसलिए इसे कभी भी आपके सिस्टम को धीमा नहीं करना चाहिए।
मिकको रेंटालिनेन

26

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


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

4

यह एक अच्छी तरह से ज्ञात समस्या है कि जब लिनक्स मेमोरी से बाहर चला जाता है तो यह स्वैप लूप में प्रवेश कर सकता है बजाय इसके कि यह क्या करना चाहिए, राम को मुक्त करने के लिए प्रक्रियाओं को मार रहा है। एक OOM (आउट ऑफ मेमोरी) हत्यारे हैं जो ऐसा करते हैं लेकिन केवल तभी जब स्वैप और रैम पूर्ण हो।

हालांकि यह वास्तव में एक समस्या नहीं होनी चाहिए। यदि आक्रामक प्रक्रियाओं का एक गुच्छा है, उदाहरण के लिए फ़ायरफ़ॉक्स और क्रोम, प्रत्येक टैब के साथ जो मेमोरी का उपयोग और हथियाने दोनों हैं, तो ये प्रक्रिया वापस पढ़ने के लिए स्वैप का कारण बनेंगी। लिनक्स फिर एक लूप में प्रवेश करता है जहां मेमोरी और हार्ड ड्राइव के बीच समान मेमोरी को आगे और पीछे ले जाया जा रहा है। यह बदले में प्राथमिकता उलटा का कारण बनता है जहां कुछ प्रक्रियाओं को आगे और पीछे स्वैप करना सिस्टम को गैर-जिम्मेदार बनाता है।

यदि आप स्वैप को अक्षम करते हैं, तो आप इस समस्या को बदतर बना देते हैं क्योंकि kswapd0 के पास अब निष्पादन योग्य जैसे मैप की गई मेमोरी को स्वैप करने के अलावा कोई विकल्प नहीं है। यदि आप निष्पादकों को स्वैप करते हैं, तो यह और भी अधिक संभावना है कि वे जल्दी से जल्दी वापस फिर से स्वैप किए जाएंगे।

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

फेसबुक को भी यह समस्या थी और उसने OOMD बनाया जो आउट ऑफ़ मेमोरी डेमॉन है। यह डेमन है जो kswapd0 गतिविधि का पता लगाता है और प्रक्रियाओं को मारना शुरू कर देता है। और फेसबुक के अनुसार इसने लगभग पूरी तरह से लिनक्स सर्वरों के गैर-जिम्मेदार बनने की समस्या को दूर कर दिया। हालाँकि मैंने इसका परीक्षण नहीं किया है और मुझे नहीं पता कि यह अन्य सर्वर या डेस्कटॉप / लैपटॉप पर कितना अच्छा काम करेगा। अपील OOMD के पास कुछ तर्क हैं जो यह तय करते हैं कि सिस्टम प्रक्रियाओं और उनके सर्वर सिस्टम के हिस्से को बचाने के लिए कौन सी प्रक्रियाओं को पहले मारना है जो कि मारे गए को फिर से लॉन्च करने के लिए जिम्मेदार हैं।

हालांकि यह नहीं है कि इसे कैसे हल किया जाना चाहिए। OOMD एक पूरी तरह से हैक है। वास्तविक समाधान प्राथमिकता उलटा को ठीक करना है जो कि स्वैप स्वैप का कारण बनता है और साथ ही कर्नेल ओओएम किलर को स्मृति को मुक्त करने के लिए प्रक्रियाओं को और अधिक आक्रामक बनाता है। फिक्स कर्नेल में है क्योंकि यह एकमात्र ऐसी जगह है जहां हम यह सुनिश्चित कर सकते हैं कि समस्या का समय पर पता चल जाए और प्रक्रियाओं को ठीक से मार दिया जाए।

स्वैगनेस सेट करना = 0 कोई समाधान नहीं है क्योंकि जब सिस्टम फ्री रैम से बाहर हो जाता है तो यह बिना किसी बात के स्वैप करना शुरू कर देता है। यह गारंटी देने का कोई विकल्प नहीं है कि सिस्टम स्वैपिंग शुरू नहीं करता है।

और आपत्तिजनक अनुप्रयोगों को ठीक करना भी एक फिक्स नहीं है। अगर उपयोगकर्ता जानबूझकर ओएस को गैर-जिम्मेदार बनाने के लिए इस बग का शोषण करना चाहता है, तो स्पष्ट रूप से नहीं। उत्तरदायी होना कर्नेल की जिम्मेदारी है। यदि फ़ायरफ़ॉक्स खुद को गैर-जिम्मेदार बनाता है तो ठीक है कि आवेदन के लिए है। हालाँकि यह न केवल खुद को अनुत्तरदायी बना रहा है बल्कि पूरे OS को बहुत धीमा और अनुत्तरदायी बना रहा है। उस स्तर तक कि एसएसएच में लॉग करने में आधा घंटा लग सकता है। SSH का कोई लेना-देना नहीं है और अगर यह चलाने के लिए नहीं मिलता है जो कि कर्नेल में एक बग है, सिस्टम के किसी अन्य भाग में नहीं। और यह एक बग नहीं है यह दो बग है। एक बग प्राथमिकता वाला उलटा होता है, जहां रेल की अदला-बदली करने वाले चक्र को आपत्तिजनक प्रक्रिया (ईएस) की तुलना में अन्य प्रक्रियाओं में हस्तक्षेप करने की अनुमति दी जाती है और यह अपने आप में खराब है। अन्य बग यह है कि यह नहीं है ' टी यह पता लगाएं कि यह एक स्वैप लूप में है और इससे HDD / SSD या जो भी स्टोरेज स्वैप का बैकअप ले रहा है, उस पर पागल हो जाता है। जब निष्पादन योग्य अदला-बदली होती है, तो यह एक समस्या कम होती है क्योंकि उन्हें केवल मेमोरी मैप्स पढ़े जाते हैं, जो डिस्क पर वापस नहीं लिखे जाते हैं, लेकिन kswapd0 अभी भी वापस पढ़ने से लॉक हो जाता है, उसी समय यह मेमोरी से डिलीट हो जाता है।

ओह और एक तीसरा बग है। तथ्य यह है कि जब स्मृति भूख अनुप्रयोगों सभी उपलब्ध स्मृति निगलने से डिस्क CACHE खाने से बचाने के लिए कोई रास्ता नहीं है। यह एक कारण है कि kswapd0 सिस्टम को अनुत्तरदायी बनाता है। सबसे हॉट मेमोरी मैप्ड डेटा आमतौर पर डिस्क कैश में संग्रहीत होता है लेकिन जब फ़ायरफ़ॉक्स ने उस कैश को खा लिया है, तो इसका स्पष्ट रूप से मतलब है कि डिस्क रीड को घटित होना होगा।

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

तो हमारे पास यहाँ तीन कर्नेल बग्स हैं जिन्हें कर्नेल टीम बगों पर विचार नहीं करती है। और फ़ायरफ़ॉक्स, क्रोम और सभी डेरिवेटिव में एक बग जिसे वे बग नहीं मानते हैं। मैंने इस समस्या को देखने और शायद इसे पैच करने के लिए अपने फेडोरा लैपटॉप पर फ़ायरफ़ॉक्स के निर्माण की कोशिश की। अंदाज़ा लगाओ। 4GB रैम के साथ 4 कोर CPU पर GCC के साथ फ़ायरफ़ॉक्स का निर्माण प्रायोरिटी इन्वेंशन के साथ एक SWAP LOOP ट्रिगर करता है। इसलिए जिन अनुप्रयोगों को फिर से लिखना है उनमें से एक जीसीसी है। NetBSD पर क्या होता है, GCC के सिर्फ 4 रनिंग इंस्टेंस में से एक इंस्टेंस को चलाने की तुलना में धीमा हो जाता है, लेकिन यह सिस्टम को फ्रीज नहीं करता है।

हाँ, यह थोड़ा कठिन है, लेकिन मुझे उम्मीद है कि यह लिनक्स मेमोरी सबसिस्टम के साथ-साथ इसके कारण आने वाले अनुप्रयोगों के साथ वर्तमान समस्या को स्पष्ट करता है।


1

यदि आपके पास कोई स्वैप नहीं है और kswapd0चल रहा है, तो आपका सिस्टम वास्तव में उस समय लगभग सभी रैम का उपयोग कर रहा है। स्मृति उपयोग (या सिस्टम में मुफ्त / उपलब्ध मेमोरी) की निगरानी के लिए बेहतर उपकरण प्राप्त करने का समय आ गया है।

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


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