सवाल लिनक्स में कैश क्यों छोड़ें?


हमारे सर्वर में मध्यरात्रि में कैश छोड़ने की आदत है।

sync; echo 3 > /proc/sys/vm/drop_caches

जब मैं कोड चलाता हूं तो यह बहुत सारी रैम मुक्त करता है, लेकिन क्या मुझे वास्तव में ऐसा करने की ज़रूरत है। मुक्त रैम एक अपशिष्ट नहीं है?


81
2018-05-20 03:12


मूल


उस व्यक्ति को ढूंढें जो इसे डालता है और उससे पूछता है कि उसने ऐसा क्यों किया। जैसा कि आपने सही ढंग से अनुमान लगाया है, इसके लिए कोई स्पष्ट कारण नहीं है। - Michael Hampton♦
कर्नेल डिबगिंग। यह इसके बारे में। यह वास्तव में किसी भी रैम को मुक्त नहीं करता है; यह कैश छोड़ देता है, जैसा कि नाम से पता चलता है, और इस प्रकार प्रदर्शन को कम करता है। - Michael Hampton♦
@ivcode फिर आपको उस सर्वर से समस्या को ढूंढना और ठीक करना चाहिए, जो इसके कारण होने वाली स्थितियों से बचने की कोशिश कर रहा है। अगर मेरी कार हर बार रुक जाती है तो मैंने तेज दाहिने मोड़ लगाए, तेज दाएं मोड़ से परहेज करना एक लुभावनी फिक्स है। - David Schwartz
सम्बंधित thedailywtf.com/Articles/Modern-Memory-Management.aspx जोरदार बहस करना यह एक बुरा विचार है। - Drunix
संबंधित, और "समस्या" का एक उपयोगी विवरण: linuxatemyram.com - Bill Weiss


जवाब:


आप 100% सही हैं। यह है नहीं रैम मुक्त करने के लिए एक अच्छा अभ्यास। यह संभवतः कार्गो पंथ सिस्टम प्रशासन का एक उदाहरण है।


85
2018-05-20 04:59



कार्गो कल्ट सिस्टम प्रशासन का उल्लेख करने के लिए +1। कोई भी sysadmin जो उस शब्द को नहीं जानता है और इसका क्या अर्थ है निकाल दिया जाना चाहिए। - Tonny
@ टॉनी: हम बिना sysadmin विभाग के छोड़े जाएंगे :( - PlasmaHH
अधिकांश मानवता की तरह, मुझे बहुत सारी मंजूरी के साथ झटकेदार झुकावों से प्यार है, लेकिन एक उद्धरण या तर्क मेरे सुपररेगो के +1 कमाएगा। - Aaron Hall
अगर आपको कोई फर्क नहीं पड़ता है, तो माल ढुलाई प्रशासन, साथ ही ऊपर बताएं। शायद एक फॉलो-ऑन संपादन में? मैं अभी भी अपना +1 रोक रहा हूं ...: पी - Aaron Hall
"यह संभव है कि आपका एप्लिकेशन इन रैम का उपयोग नहीं कर रहा हो लेकिन लिनक्स अपनी याददाश्त में आक्रामक रूप से कैशिंग कर रहा है और भले ही एप्लिकेशन को मेमोरी की आवश्यकता हो, फिर भी यह कैश में से कुछ मुक्त नहीं होगा बल्कि स्वैपिंग शुरू कर देगा।" बहुत विशिष्ट नहीं है। प्रैक्टिस में, मेमोरी मैनेजमेंट सही नहीं है, और उस अपूर्णता को दिखाने के लिए घुटने टेकना एक अच्छी बात है। - Dan Pritts


हां, समाशोधन कैश रैम मुक्त कर देगा, लेकिन यह कर्नेल को कैश की बजाय डिस्क पर फ़ाइलों को देखने का कारण बनता है जो प्रदर्शन समस्याओं का कारण बन सकता है।

आम तौर पर जब कर्नेल उपलब्ध हो जाता है तो कर्नेल कैश साफ़ कर देगा। यह अक्सर पीडीएफएलश का उपयोग कर डिस्क पर गंदे सामग्री लिखता है।


62
2018-05-20 06:26



व्याख्या करने के लिए +1 क्यूं कर यह एक बुरा विचार है। - Ogre Psalm33


इस तरह के कैश को छोड़ने का कारण डिस्क प्रदर्शन को बेंचमार्क करना है, और यह एकमात्र कारण है।

I / O-गहन बेंचमार्क चलाते समय, आप यह सुनिश्चित करना चाहते हैं कि आपके द्वारा कोशिश की जाने वाली विभिन्न सेटिंग्स वास्तव में डिस्क I / O कर रही हैं, इसलिए लिनक्स आपको पूर्ण रीबूट करने के बजाय कैश छोड़ने की अनुमति देता है।

से उद्धरण करने के लिए प्रलेखन:

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

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


34
2018-05-20 13:51



बेशक, आप जो करने की कोशिश कर रहे हैं उसके आधार पर, एक पूर्ण रीबूट भी डिस्क कैश को पर्याप्त रूप से साफ़ नहीं कर सकता है। - α CVn
"स्मृति की आवश्यकता होने पर इन ऑब्जेक्ट्स को कर्नेल द्वारा स्वचालित रूप से पुनः दावा किया जाता है" डिज़ाइन लक्ष्य है लेकिन यह हमेशा वास्तविक व्यवहार नहीं हो सकता है। - Dan Pritts
@ डैनप्रिट्स आपको क्या लगता है कि ऐसा नहीं है? - Joe
स्पष्ट मामला तब होता है जब आप रैम को साफ़ करना चाहते हैं ताकि अधिक (गैर-ट्रांस्पेरेंट) गले लगाने के आवंटन की अनुमति मिल सके; एक और मामला पारदर्शी हूजेज कचरा संग्रह रोकें बग (इस प्रश्न पर कहीं और मेरे उत्तर / टिप्पणियां देखें)। लेकिन मेरी टिप्पणी सामान्य मामले के लिए थी। कभी-कभी जो लोग सिस्टम का संचालन कर रहे हैं वे उन लोगों की तुलना में बेहतर जानते हैं जिन्होंने इसे डिजाइन / कार्यान्वित किया है। अक्सर, नहीं - यही उनकी टिप्पणी के खिलाफ सुरक्षा करने की कोशिश कर रहा है। मुझे बस खुशी है कि - Dan Pritts


यहां मूल विचार शायद बुरा नहीं है (केवल बहुत ही भद्दा और भ्रामक): फाइलें कैश की जा सकती हैं, जो निकट भविष्य में उपयोग की जाने वाली संभावना नहीं है, उदाहरण के लिए लॉगफाइल। ये "खाने" राम हैं, जिन्हें बाद में ओएस द्वारा एक या दूसरे तरीके से जरूरी होने पर मुक्त किया जाना चाहिए।

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

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

लेकिन कैश को इस समस्या का समाधान छोड़ रहा है? निश्चित रूप से नहीं। लिनक्स को यह बताने का समाधान क्या होगा कि यह क्या नहीं जानता: कि इन फ़ाइलों का अब और उपयोग नहीं किया जाएगा। यह चीजों का उपयोग कर लेखन आवेदन द्वारा किया जा सकता है posix_fadvise()या एक cmd लाइन उपकरण का उपयोग कर vmtouch (जिसे चीजों के साथ-साथ कैश फाइलों को देखने के लिए भी इस्तेमाल किया जा सकता है)।

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

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


25
2018-05-20 19:46



मेरे सर्वर पर सभी एप्स नोहुप पर चल रहे हैं। शायद nohup.out कैश किया जा रहा है और स्मृति खा रहा है? - ivcode
@ivcode: यह एक कारण हो सकता है, जांचें कि कितना बड़ा nohup.out है। शायद यह पता लगाने के लिए vmtouch का उपयोग करें कि इसमें से कितना कैश किया गया है। - PlasmaHH
मेरे पास एक क्रॉन नौकरी है cat /dev/null > path/nohup.out प्रत्येक 15 मिनट में nohup.out तेजी से बढ़ रहा है। हो सकता है कि लिनक्स कैशिंग नोहुप.आउट भी हो, भले ही मैं इसे साफ़ कर रहा हूं - ivcode
@ivcode अगर आपको आउटपुट की आवश्यकता नहीं है nohup आपको इसे फिर से निर्देशित करना चाहिए /dev/null। ऐसा लगता है कि आपके पास कुछ सिस्टम पर काम कर रहे कुछ बेहद अनुभवहीन sysadmins थे। देख stackoverflow.com/questions/10408816/... कैसे निर्देशित करें nohupआउटपुट करने के लिए /dev/null - David Wilkins
हालांकि 15 मिनट अंतराल में nohup.out को मंजूरी दे दी गई है, अगर किसी कारण से ऐप्स की प्रक्रिया मारे गए, तो nohup.out स्वचालित रूप से किसी अन्य स्क्रिप्ट से बैक अप लिया जाएगा। मैंने vmtouch की कोशिश की। यह वास्तव में एक बहुत अच्छा उपकरण है - ivcode


आभासी मशीनों का एक समूह शुरू करते समय मैंने ड्रॉप कैश उपयोगी होने के लिए देखा है। या कुछ और जो कुछ पेज सर्वर जैसे बड़े पेजों का उपयोग करता है।

लिनक्स में बड़े पेजों को अक्सर पृष्ठ में डालने के लिए 2 एमबी संगत भौतिक रैम खोजने के लिए रैम को डिफ्रैग करने की आवश्यकता होती है। सभी फाइल कैश को मुक्त करने से यह प्रक्रिया बहुत आसान हो जाती है।

लेकिन मैं अन्य उत्तरों के साथ सहमत हूं कि हर रात फ़ाइल कैश को छोड़ने का आम कारण नहीं है।


16
2018-05-22 00:47



मैं दूसरी ऑर्डर पूर्वाग्रह को इंगित करने के लिए उभरा हूं, कैश छोड़ने के लिए प्रतिक्रिया है। - Noah Spurrier
इसके अलावा, उच्च-स्मृति नोड्स (1 टीबी) पर एचपीसी अनुप्रयोगों में, कुछ बड़ी फ़ाइलों में पढ़ने के परिणामस्वरूप कैश की बड़ी मात्रा में परिणाम होता है। चूंकि कई एचपीसी अनुप्रयोग सैकड़ों जीबी के मॉलोक का प्रदर्शन करते हैं, इसलिए प्रणाली घंटों तक रुक सकती है क्योंकि प्रवासन प्रक्रियाएं कैश मेमोरी "सीमा" तक पहुंचने के बाद एमआरए नोड्स में बिना किसी खंडित स्मृति के छोटे हिस्से को विभाजित करती हैं। इससे भी बदतर, यूजरलैंड में कैश को मुक्त करने के लिए आप कुछ भी नहीं कर सकते हैं, सिवाय इसके कि सिस्टम को सभी छोटे 2 एमबी ब्लॉकों को आवंटित करने के लिए ट्रिक करें, इसे एक बार फिर रिलीज़ करना, गले लगाए गए डिफ्रैग को देना और ऐप्स सामान्य रूप से चलते हैं। - user1649948
+1 बड़े पेज बनाने के लिए आदेश (sysctl -w vm.nr_hugepages=...) तब तक काम करने से इंकार कर देता है जब तक कि मैं पहली बार कैश नहीं छोड़ता (आर्क लिनक्स)। - Aleksandr Dubinsky


यह संभव है कि इसे सिस्टम को स्थिर करने के तरीके के रूप में स्थापित किया गया था जब वास्तव में समस्या को खोजने के लिए कौशल या अनुभव के साथ कोई नहीं था।

संसाधनों को मुक्त करना

गिरने वाले कैश अनिवार्य रूप से कुछ संसाधनों को मुक्त कर देंगे, लेकिन यह वास्तव में सिस्टम को करने के लिए कठिन परिश्रम करने का दुष्प्रभाव है जो वह करने की कोशिश कर रहा है। अगर सिस्टम स्वैपिंग कर रहा है (डिस्क स्वैप विभाजन से पढ़ने और लिखने की कोशिश कर रहा है, तो यह वास्तव में सक्षम है) तो समय-समय पर कैश छोड़ना आसान हो सकता है लक्षण, लेकिन इलाज करने के लिए कुछ भी नहीं करता है कारण

स्मृति क्या खा रहा है?

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

जमीनी स्तर

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


8
2018-05-20 15:16





लिनक्स / एम 68 के पास वास्तव में एक कर्नेल बग है जो kswapd को पागल होने का कारण बनता है और 100% सीपीयू (50% यदि कोई अन्य सीपीयू-बाध्य कार्य है, जैसे डेबियन बाइनरी पैकेज ऑटोब्यूल्डर - vulgo buildd - पहले से चल रहा है), जो (सबसे अधिक हो सकता है) समय के साथ, हमेशा नहीं) हर कुछ घंटों में इस विशेष आदेश को चलाकर कम किया जाए।

ऐसा कहा जा रहा है ... आपका सर्वर सबसे अधिक संभावना नहीं है m68k (अटारी, अमीगा, क्लासिक मैकिंतोश, वीएमई, क्यू 40 / क्यू 60, सन 3) सिस्टम ;-)

इस मामले में, जो व्यक्ति लाइनों में डालता है या तो कुछ संदिग्ध या सबसे अच्छा, पुरानी सलाह का पालन करता है, या इस बारे में विचार मिलता है कि रैम को गलत तरीके से कैसे इस्तेमाल किया जाना चाहिए (आधुनिक सोच वास्तव में कहती है कि "फ्री रैम रैम बर्बाद हो गया है" और कैशिंग का सुझाव देता है) , या "खोजा गया" कि यह "फिक्सेस" [एसआईसी!] कहीं और समस्या है (और उचित फिक्स खोजने के लिए बहुत आलसी था)।


4
2018-05-21 08:03



"एक कर्नेल बग जो kswapd पागल हो जाता है" - यह कौन सा बग है? - Ben
@बेन देखें यह धागा (यह संदेश और कुछ फॉलोअप, जिनमें से एक अनुमान लगाता है जहां से यह आ सकता है) - mirabilos
मुझे एक समान समस्या का सामना करना पड़ रहा है (हालांकि यह x86_64 है) और इस पल में एकमात्र समाधान कैश छोड़ना है serverfault.com/questions/740790/... - Fernando
@Fernando मेरे पास m68k बॉक्स पर भी "ड्रॉप कैश" cronjob है - mirabilos


एक कारण यह हो सकता है कि साइट किसी प्रकार की निगरानी चल रही है, जो कि मुफ्त रैम की मात्रा की जांच करती है और नि: शुल्क राम एक निश्चित प्रतिशत से नीचे गिरने पर प्रशासकों को चेतावनी भेजती है। यदि वह निगरानी उपकरण पर्याप्त राम गणना में कैश को शामिल न करने के लिए पर्याप्त गूंगा है, तो यह झूठी चेतावनियां भेज सकता है; कैश को नियमित रूप से खाली करने से इन चेतावनियों को दबाया जा सकता है, जबकि उपकरण को "असली" राम कम होने पर नोटिस करने की अनुमति देता है।

बेशक, इस तरह की स्थिति में, वास्तविक समाधान कैश को मुफ्त रैम गणना में शामिल करने के लिए निगरानी उपकरण को संशोधित करना है; कैश की सफाई सिर्फ एक वर्कअराउंड है, और एक बुरी भी है, क्योंकि डिस्क तक पहुंचने पर कैश जल्दी से फिर से भर जाएगा।

तो अगर मेरी धारणा सच है, तो कैश-सफाई कुछ ऐसा नहीं है जो समझ में आता है, यह किसी ऐसे व्यक्ति द्वारा कामकाज है जो प्राथमिक समस्या को ठीक करने के लिए पर्याप्त सक्षम नहीं है।


3
2018-05-21 06:20