लिनक्स पर वर्चुअल मेमोरी उपयोग> स्वैप + फिजिकल को समझना


9

मेरे पास एक प्रक्रिया है जो 'शीर्ष' में रिपोर्ट कर रही है कि इसमें 6GB निवासी मेमोरी और 70GB वर्चुअल मेमोरी आवंटित है। अजीब बात यह है कि इस विशेष सर्वर में केवल 8GB भौतिक और 35GB स्वैप स्थान उपलब्ध है।

'शीर्ष' मैनुअल से:

   o: VIRT  --  Virtual Image (kb)
      The total amount of virtual memory used by the  task.   It  includes
      all  code,  data  and  shared  libraries  plus  pages that have been
      swapped out. (Note: you can define the STATSIZE=1 environment  vari-
      able  and  the VIRT will be calculated from the /proc/#/state VmSize
      field.)

      VIRT = SWAP + RES.

इस स्पष्टीकरण को देखते हुए, मैं उम्मीद करता हूं कि वायरल मेमोरी आवंटन एक प्रक्रिया के लिए उपलब्ध होगा जो मेरे स्वैप + भौतिक मेमोरी तक सीमित होगी।

'Pmap' के अनुसार, इस प्रक्रिया का कोड, साझा पुस्तकालय और साझा मेमोरी अनुभाग सभी न्यूनतम हैं - 300M या अधिक से अधिक नहीं।

जाहिर है, मशीन और प्रक्रिया अभी भी सही ढंग से काम कर रही है (धीरे-धीरे), तो मैं यहां क्या याद कर रहा हूं?

जवाबों:


9

यह शून्य मेमोरी की मांग हो सकती है जो भौतिक रैम में या पेजफाइल में नहीं है।

कुछ संसाधन जिन्हें आप देखना चाहते हैं:

क्या आपका एप्लिकेशन बहुत सारे खाली मेमोरी पेज बनाता है? यदि ऐसा है, तो आपके एप्लिकेशन से बहुत लाभ हो सकता है:

यह आपको वास्तविक समय के मेमोरी पेज में संपीड़ित और विघटित करने की अनुमति देता है। बदले में, आप स्वैप से डिस्क ( बहुत धीमी ) के बजाय सब कुछ रैम में रखने में सक्षम हैं ।


हां, एप्लिकेशन का IPV4 स्पेस में बहुत अधिक सहसंबंध है, इसलिए संभवतः ट्रैफ़िक वितरण के आधार पर इसमें बहुत सारे खाली पृष्ठ हो सकते हैं। हमें उसके लिए बाहर देखना होगा। धन्यवाद!
बेली

मदद करने में खुशी, उम्मीद है कि कुछ अन्य उपयोगकर्ता मुझे का प्रतीक होगा। मैं हत्यारा जवाब के साथ आने लेकिन मैं 1,266 की रेटिंग नहीं है :-( मैं सर्वर गलती उन मेरे जैसे नहीं लगता कि hahhah।
यूनिक्स चौकीदार

1
कुछ कारण जिनसे लोग आपको वोट नहीं दे सकते हैं: 1. आपके उत्तर का प्रारूपण --- मार्कअप का उपयोग करें। 2. आपका उपयोगकर्ता नाम सामान्य लगता है। 3. सबसे महत्वपूर्ण: तथ्य यह है कि आपको इसके बारे में टिप्पणी करने के लिए पर्याप्त महत्वपूर्ण लगता है। लोगों के मुंह में खट्टा स्वाद छोड़ देता है।
बेलमिन फर्नांडीज

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

1
कुछ स्वरूपण किया। उम्मीद है कि यह हेह की मदद करता है।
Belmin फर्नांडीज

2

यहाँ virt बनाम निवासी स्मृति की चर्चा है:

/programming/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used

चर्चा जावा प्रक्रियाओं को संदर्भित करता है, लेकिन लिनक्स के तहत चल रहा कुछ भी करने के लिए लागू होता है। पुण्य के संबंध में मुख्य बिंदु यह है कि कुल में सामान का एक पूरा गुच्छा शामिल है जिसका उपयोग कभी नहीं किया जा सकता है। Virt कुछ 32-बिट OSes के लिए को देखने के लिए (के बाद से प्रक्रियाओं पता स्थान पर सीमाओं को पार कर जाएगा) है, लेकिन मोटे तौर अन्यथा उपयोगी नहीं है। जैसा कि उल्लेख किया गया है, ध्यान देने वाली बात निवासी मेमोरी है, जो उपलब्ध भौतिक रैम और आपके स्वैप तक सीमित होगी।


उन्होंने वास्तव में पूछा कि वर्चुअल मेमोरी क्यों आवंटित की गई उनकी भौतिक मेमोरी + स्वैप स्पेस से बड़ी थी ..
यूनिक्स जेनिटर

हाँ, और Stackoverflow में चर्चा कैसे संभव है के बारे में बात करता है।
CJC

1

यह संभावना है क्योंकि प्रक्रिया का पता स्थान आकार जैसा कि आपने कहा है, लेकिन यह वास्तव में ओएस द्वारा आवंटित नहीं किया गया है।

प्रेषक: http://lwn.net/Articles/428100/

"कम पर्याप्त ओवरहेड और कोई महत्वपूर्ण विलंबता" के उस लक्ष्य तक पहुंचने की कोशिश में, गो डेवलपर्स ने कुछ सरल धारणाएं बनाई हैं, जिनमें से एक यह है कि रनिंग एप्लिकेशन के लिए प्रबंधित की जा रही मेमोरी, वस्तुतः-सन्निहित से आती है पता सीमा। इस तरह की धारणाएँ उसी समस्या में चल सकती हैं जो आपके संपादक ने vi के साथ हिट की थी - अन्य कोड रेंज के बीच में टुकड़े आवंटित कर सकते हैं - इसलिए गो डेवलपर्स ने एक ही समाधान अपनाया: वे बस वे सभी मेमोरी आवंटित करते हैं जो उन्हें लगता है कि उन्हें ज़रूरत हो सकती है (उन्हें लगा,) उचित रूप से, यह कि स्टार्टअप के समय 16GB को 64-बिट सिस्टम पर पर्याप्त होना चाहिए)।

तो यह है कि अभिमानी तरीके से स्मृति प्रबंधन कभी-कभी किया जाता है - एक निरंतर पता स्थान होने से अप्रयुक्त मेम को रिहा करने में सरलता होती है।


0

जवाब शायद MMAP है - डेटा डिस्क पर है, लेकिन यह स्वैप के "बाहर" है और इसे "फ्री" या "टॉप" कमांड के साथ नहीं देखा जा सकता है।

यदि जावा प्रक्रिया बहुत जटिल नहीं है, तो आप MMS फ़ाइल कहाँ है यह जानने के लिए "lsof" के साथ खेलने का प्रयास कर सकते हैं। लेकिन अगर यह जावा की प्रक्रिया जटिल है, वहाँ देखा जा करने के लिए मुश्किल हो जाएगा।


-1

मुझे यह भी आश्चर्य हुआ कि लिनक्स आपको भौतिक मेमोरी + स्वैप स्पेस की तुलना में अधिक वर्चुअल मेमोरी आवंटित करने की अनुमति देता है, लेकिन जाहिर तौर पर यह विशिष्ट परिस्थितियों में प्रदर्शन में मदद करता है।

सौभाग्य से, एक कर्नेल-ट्यूनिंग पैरामीटर है जिसका उपयोग मेमोरी अकाउंटिंग मोड को स्विच करने के लिए किया जा सकता है। यह पैरामीटर vm.overcommit_memory है, और यह इंगित करता है जो एल्गोरिथ्म उपलब्ध स्मृति ट्रैक करने के लिए प्रयोग किया जाता है। डिफ़ॉल्ट (0), अनुमानी विधि का उपयोग करता है और आभासी स्मृति प्रणाली overcommits। आप अपने प्रोग्राम के बजाय यादृच्छिक हत्याओं के लिए अपनी प्रक्रियाओं विषय के आवंटन पर उचित आउट-ऑफ-मेमोरी त्रुटि प्राप्त करना चाहते हैं, तो आप 2 के लिए इस पैरामीटर स्थापित करना चाहिए।

http://www.linuxjournal.com/article/10678


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