2009-03-01 22 views
27

द्वारा उपयोग किए गए कैश को साफ करने के लिए कैसे करें मैं कैश को बहुत अधिक मेमोरी लेने के बाद लिनक्स कर्नेल को अधिक मेमोरी आवंटित करना चाहता हूं (जैसा कि 'मुक्त' के आउटपुट द्वारा देखा जा सकता है)।लिनक्स कर्नेल

मैं

sudo sync; sudo sysctl -w vm.drop_caches=3; free 

दौड़े हैं (दोनों डिस्क dentry/inode कैश और कैश पेज मुक्त करने के लिए) और मुझे लगता है कि केवल इस्तेमाल किया कैश के बारे में आधे मुक्त कर दिया गया था - बाकी रह जाता है। मैं कैसे बता सकता हूं कि शेष कैश क्या ले रहा है और इसे मुक्त करने के लिए मजबूर कर सकता है?

+0

जो चाचा रहता है वह केवल कैश होता है जो तुरंत नई फेंकने की आवश्यकता होती है। इन कैश क्षेत्रों को हटाने के लिए मजबूर होना फायदेमंद नहीं है। एप्लिकेशन हमेशा स्मृति के लिए पहले नागरिक होंगे और इसके लिए कैश से लड़ने की ज़रूरत नहीं है। – ypnos

+1

मुझे अपने सर्वर के साथ कोई समस्या है, और मेरा मानना ​​है कि उस बिंदु पर कैश का दुरुपयोग किया जा रहा है जहां पृष्ठों को स्वैप करने के लिए अनुप्रयोगों को हटा दिया गया है और स्मृति की कमी के कारण थका हुआ है। यह एक कर्नेल मुद्दा हो सकता है जो यह नहीं हो सकता है। कैश को पर्ज करना परीक्षण का एक अच्छा तरीका हो सकता है। – Guss

+0

आपका 'sysctrl' होना चाहिए 'sysctl' – raittes

उत्तर

17

आप vfs_cache_pressure को बढ़ाने के साथ-साथ 0 पर स्वैपनेस सेट करना चाहते हैं। ऐसा करने से कर्नेल तेजी से कैश को पुनः प्राप्त कर देगा, जबकि प्रक्रियाओं को तय करते समय समान या अधिक पक्ष प्रदान करते हैं पर paged बाहर हो जाता है। आप केवल ऐसा करना चाहते हैं यदि आप प्रक्रियाओं को बहुत कम डिस्क I/O करने की परवाह करते हैं। यदि किसी नेटवर्क I/O बाध्य प्रक्रिया को अनुरोधों को पूरा करने के लिए स्वैप करना है, तो यह एक समस्या है और असली समाधान इसे कम प्रतिस्पर्धी सर्वर पर रखना है।

डिफ़ॉल्ट स्वैप सेटिंग के साथ, कर्नेल लगभग हमेशा वास्तविक स्मृति में एफएस संबंधित कैश रखने के पक्ष में है। तो यदि आप कैश दबाव बढ़ाते हैं, तो स्वैपनेस को समायोजित करना भी सुनिश्चित करें।

+0

उत्तर के लिए धन्यवाद। यद्यपि मैं इसकी उम्मीद नहीं कर रहा था, मैं इसे स्वीकार करूंगा क्योंकि इसमें ऐसी जानकारी शामिल है जिसे मैं नहीं जानता था और लक्ष्य प्राप्त करने के लिए कुछ दिशानिर्देश देता हूं। मैं अभी भी यह जानना चाहूंगा कि कैसे कैश का उपयोग किया जाता है, विशेष रूप से जब इसे drop_caches द्वारा साफ नहीं किया जा रहा है। – Guss

16

/proc/meminfo की सामग्री आपको बताती है कि कर्नेल किस RAM का उपयोग करता है।

आप याद है कि फाइल सिस्टम से संबंधित कैश के लिए और अधिक lazily या बेसब्री से प्रयोग किया जाता है पुनः प्राप्त करने के लिए मजबूर करने की गिरी /proc/sys/VM/vfs_cache_pressure उपयोग कर सकते हैं।

ध्यान दें कि आपका एप्लिकेशन केवल इस पैरामीटर को ट्यून करने से लाभ हो सकता है यदि यह बहुत कम या कोई डिस्क I/O करता है।

+1

ठीक कर दूंगा मेरा ऐप बहुत छोटा IO करता है - अधिकांश डेटा रिमोट डीबी से होता है। मैं/proc/meminfo पर थोड़ा आलसी हूं: मैं कैश के बारे में देखता हूं: 1.9 जीबी, स्वैप कैश: 8 एमबी। आईआईआरसी, इसका मतलब है कि कैश 8 एमबी स्वैप कैशिंग, 1.8 9 2 जीबी अन्य सामान (डिस्क कैश, और और क्या?) से बना है। मेमोरी मैप की गई फाइलों की गणना कहाँ की जाती है? – Guss

+0

मेमोरी मैप की गई फ़ाइलें (यदि ऐप बिल्कुल अच्छा है) तो अपनी खुद की सलाह और दबाव होना चाहिए, अधिमानतः पॉज़िक्स_माडविज़() को कॉल करने वाले एप्लिकेशन द्वारा। आप अपनी 'स्वैपनेस' सेटिंग पर भी पढ़ना चाहेंगे। –

+0

वास्तव में एक अच्छा जवाब है, बस मेरे प्रश्न का उत्तर नहीं :-)। क्या मैं सही ढंग से समझता हूं कि स्मृति मैप की गई फ़ाइलों को उनके एप्लिकेशन के आरईएस मेमोरी पदचिह्न के खिलाफ गिना जाता है? – Guss

15

आप परीक्षण करने के लिए कि आपकी समस्या से संबंधित है कि क्या क्रम में कैश के शुद्धिकरण के लिए John Nilsson's answer to my Question उपयोगी लग सकते:

sync && echo 1 > /proc/sys/vm/drop_caches

हालांकि मैं केवल वास्तविक अंतर अनुमान लगा रहा हूँ बनाम 1 है 3

+0

1 केवल डिस्क कैश साफ़ करता है - यह आपके प्रश्न के लिए प्रासंगिक था। मैं पृष्ठ कैश को भी साफ़ करना चाहता हूं क्योंकि मुझे लगता है कि मेरे ऐप्स में से एक स्मृति को लीक कर रहा है और बुरी तरह से थका रहा है। – Guss

+2

1 पृष्ठ कैश साफ़ करता है, 2 दांतों और इनोड को साफ़ करता है, 3 स्पष्ट पृष्ठ कैश, दंत चिकित्सा और इनोड – Schildmeijer

संबंधित मुद्दे