लगातार लिनक्स में स्वैप का आकार बढ़ रहा है और स्वैप स्पेस को पुनः प्राप्त नहीं किया जा रहा है?


10

मेरे पास एक 8GB RAM का लिनक्स बॉक्स है जिस पर 4 tomcat सर्वर चल रहे हैं। उनमें से एक 3000MB मेमोरी (jvm -Xms और -Xmx सेटिंग) पर सेट है और अन्य 1500MB पर सेट हैं। स्वैप विभाजन भी 8Gigs पर सेट है। जब मैं इन सर्वरों को शुरू करता हूं, तो स्वैप फाइल का उपयोग कम होता है। लेकिन कुछ दिनों के दौरान और निश्चित समय के दौरान जब एक / सभी सर्वर चरम गतिविधि में होते हैं, स्वैप का उपयोग बढ़ने लगता है। यहाँ एक सामान्य सर-आर आउटपुट है।

kbmemfree kbmemused% का दुरुपयोग किया गया kbbuffers kbcached kbswpfree kbswpused % swpused kbswpcad

48260 8125832 99.41 196440 2761852 7197688 1190912 14.20 31,0006044

75504 8098588 99.08 198032 2399460 7197688 1190912 14.20 316032

यह वर्तमान में इस्तेमाल 14.2% स्वैप दिखाता है। मजेदार बात यह है कि यह कभी घटता नहीं हैयह 30-40% तक बढ़ता और पहुंचता रहता है । हम साप्ताहिक रूप से अपने सर्वर को पुनः आरंभ करते हैं।

मुझे लगता है कि पीक गतिविधि की अवधि के दौरान वृद्धि और कम गतिविधि की अवधि के दौरान घटने वाले % की वृद्धि होगी। या कम से कम स्थिर रहें। ऐसा लगता है कि स्वैप स्थान ओएस द्वारा कभी भी पुनः प्राप्त नहीं होता है।

मुफ्त का आउटपुट: फ्री-एम टोटल यूज्ड फ्री शेयर्ड बफ़र्स कैशेड मेम: 7982 7937 45 0 32 2088 - / + बफ़र्स / कैश: 5816 2166 स्वैप: 8191 1163 7028

तो वहाँ कम से कम 2g मुक्त राम है। तो सवाल यह है कि स्वैप स्पेस को OS द्वारा क्यों बढ़ाया और वापस प्राप्त नहीं किया जा रहा है? या कैसे यह पता लगाने के लिए डिबग करने के लिए whats hapenning ..

जवाबों:


12

यदि जानकारी को डिस्क पर स्वैप किया जाता है और बाद में मेमोरी में वापस पढ़ा जाता है, तो इसे अक्सर स्वैप क्षेत्र में आवंटित किया जाएगा जब तक कि स्वैप स्पेस कम न हो जाए। इसका मतलब यह है कि यदि उसी जानकारी को बाद में फिर से स्वैप करने की आवश्यकता है और नहीं बदली गई है, तो OS केवल समय बचाने के लिए कुछ भी लिखने की आवश्यकता के बिना आवंटित RAM से पृष्ठों को हटा सकता है।

मेमोरी में वापस पढ़े गए सामान को आवंटित स्वैप या तो मुक्त कर दिया जाएगा

  1. जब प्रासंगिक पृष्ठों की अब आवश्यकता नहीं है (यानी आवेदन द्वारा मुक्त किया जाता है)
  2. जब प्रासंगिक पृष्ठ बदले जाते हैं (इसलिए डिस्क पर प्रतिलिपि अब तक नहीं है)
  3. मशीन स्वैप स्पेस पर कम चलती है इसलिए कमरे बनाने के लिए कुछ चीजें पहले से ही साफ कर देती हैं

में देखो /proc/meminfoएक लाइन कहा जाता है के लिए "SwapCached"। यह प्रविष्टि उन पृष्ठों को गिनती है जो रैम और स्वैप विभाजन दोनों में पाए जाते हैं। उदाहरण के लिए, यादृच्छिक पर एक छोटे से वीएम को चुनना, /proc/meminfoमेरे वीएम में से एक आभासी फ़ाइल दिखाता है:

SwapTotal:        698816 kB
SwapFree:         624520 kB
SwapCached:        17232 kB

यह दर्शाता है कि 74268K स्वैप स्थान आवंटित किया गया है, लेकिन उन पृष्ठों के 17232K मूल्य वर्तमान में भी रैम में मैप किए गए हैं (इसलिए यदि किसी स्थान की आवश्यकता है तो एक पल के नोटिस में स्वैप से निपटा जा सकता है)।

इसके अलावा इसमें कोई संदेह नहीं होगा कि उम्र के पहले स्वैप किए गए पेज वहां बैठे थे और फिर से कभी भी उनका उपयोग नहीं किया गया। कर्नेल केवल स्वैप से पृष्ठों को फिर से लोड नहीं करेगा क्योंकि इसे वापस पढ़ने के लिए कुछ मुफ्त रैम है क्योंकि कैश या बफर के लिए बेहतर रैम का उपयोग किया जा सकता है - स्वैप के लिए लिखे गए पृष्ठ आम तौर पर केवल तब ही फिर से पढ़े जाते हैं जब वे अगली जरूरत होते हैं।

यदि आप साफ़ करना चाहते हैं कि स्वैप में क्या है, जब तक आपके पास पर्याप्त फ्री और / या फ्रीवेबल (यानी फ्री + कैश + बफ़र्स (c + b काउंट्स के वे हिस्से जो फ्रीवेबल राइटसैंसटेंट नहीं हैं) के कम हिस्से), बस इसे चालू करें बंद और वापस फिर से साथ swapoff -a && swapon -a

बेशक आप कहीं न कहीं एक मेमोरी लीक भी हो सकते हैं, लेकिन यह केवल आपके द्वारा देखे जा रहे व्यवहार के लिए स्पष्टीकरण नहीं है।


बहुत बढ़िया जवाब। धन्यवाद। तो मेरा सिस्टम वर्तमान में स्वपोटल दिखाता है: 8388600 kB SwapFree: 7197688 kB SwapCached: 595724 kB तो वास्तविक स्वैप नि: शुल्क = 7197688 + 595724 = 7343412। Actul Swap प्रयुक्त = 8388600 - 7793412 = 595188 = 581MB8। मुझे लगता है कि 581MB स्वैप फ़ाइल का उपयोग 8GB प्रणाली के लिए उचित है, जिसमें 4 ऐप चल रहे हैं। मुझे अगले दो दिनों के लिए इसकी निगरानी करने दें और देखें कि क्या स्वैप स्वैप आंकड़ा% swapUsed के अनुपात में बढ़ता रहता है।
ज़ेनिल

2

असल में, आप इस बारे में परवाह करने की जरूरत नहीं है। यह जानना महत्वपूर्ण है कि IO स्वैप में कितना जाता है ('vmstat' कमांड पर एक नज़र डालें)। स्वैप में अधिक सामान होने से कुछ भी खर्च नहीं होता है। केवल लागत स्वैप (पृष्ठ) में सामान डाल रही है या इसे बाहर ले जा रही है (पृष्ठ बाहर)। तो यह ओएस के लिए पूरी तरह से कारण है कि स्वैप को बढ़ने दें।


1
यह जानना महत्वपूर्ण है कि स्वैप क्यों बढ़ रहा है और कभी कम नहीं हो रहा है। क्या होगा अगर हम अपने सर्वर को हफ्तों तक चालू रखने की अनुमति दें? क्या स्वैप सीमा से परे बढ़ेगा और स्मृति मुद्दों में परिणाम देगा? स्वैपिन / स्वैपआउट "उचित" लगता है .. पीक गतिविधि की अवधि के दौरान उच्च स्वैपिन / स्वैपआउट होता है (और% स्वैपैप भी बढ़ता है) .. सामान्य अवधि के दौरान स्वैपिन / स्वैपआउट कम से कम होता है, लेकिन% स्वैप में कमी नहीं होती है
ज़ेनिल

0

जब तक आपके पास स्वैप स्पेस उपलब्ध है, तब तक ओएस को स्वैप स्पेस खाली करने की कोई आवश्यकता नहीं है। जब कोई जगह नहीं छोड़ी जाएगी तो इसे मुक्त किया जाएगा। जब आप इस स्थिति में आते हैं तो आपको निश्चित रूप से कोई समस्या होती है।


0

यह बताने का कोई तरीका नहीं है कि क्या यह अंततः एक मुद्दा बन जाएगा, जब तक कि आप एक सर्वर नहीं चलाएंगे कि क्या यह मुद्दा बनता है।

मूल रूप से OS उन चीजों को स्वैप कर देगा जिनका उपयोग हर समय कुछ मेमोरी को खाली रखने के लिए नहीं किया जा रहा है, यदि कोई नया कार्यक्रम शुरू होता है। स्वैप स्पेस को तब तक मुक्त नहीं किया जाएगा जब तक कि इसकी आवश्यकता न हो, मतलब आपके पास उपयोग किए गए 100% स्वैप स्थान हो सकते हैं और कोई प्रदर्शन समस्या नहीं है। चिंता की बात यह है कि ऐसा मेमोरी लीक के कारण हो रहा है। यह जरूरी नहीं कि मेमोरी लीक हो, लेकिन हो सकता है।

जावा मेमोरी लीक होने का खतरा नहीं है, लेकिन यह विशेष रूप से जटिल ऐप्स के साथ हो सकता है।

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