सवाल शीर्ष - वर्चुअल मेमोरी आकार का क्या अर्थ है? ... Linux / Ubuntu


मैं भाग रहा हुँ top मेरे सर्वर प्रदर्शन की निगरानी करने के लिए और मेरी जावा प्रक्रियाओं में से 2 800 एमबी -1 जीबी तक वर्चुअल मेमोरी दिखाती है। क्या यह गलत बात है?

वर्चुअल मेमोरी का मतलब क्या है?

और ओह बीटीडब्ल्यू, मेरे पास 1 जीबी का स्वैप है और यह 0% इस्तेमाल करता है। तो मैं उलझन में हूँ।

जावा प्रक्रिया = 1 टोमकैट सर्वर + मेरा स्वयं का जावा डिमन सर्वर = उबंटू 9.10 (कर्मिक)


99
2018-05-04 15:37


मूल


देख: serverfault.com/questions/48582/... - Juliano


जवाब:


वर्चुअल मेमोरी भी आवश्यक स्मृति नहीं है। उदाहरण के लिए, यदि एक प्रक्रिया मेमोरी-मैप्स एक बड़ी फ़ाइल है, तो फ़ाइल वास्तव में डिस्क पर संग्रहीत होती है, लेकिन यह अभी भी प्रक्रिया में "पता स्थान" लेती है।

पता स्थान (यानी प्रक्रिया सूची में वर्चुअल मेमोरी) की कोई कीमत नहीं है; यह वास्तविक नहीं है। असली क्या है आरएसएस (आरईएस) कॉलम, जो निवासी स्मृति है। यह आपकी वास्तविक स्मृति की एक प्रक्रिया है जो एक प्रक्रिया पर कब्जा कर रहा है।

लेकिन यह भी पूरा जवाब नहीं है। अगर एक प्रक्रिया फोर्क () कहती है, तो यह दो भागों में विभाजित होती है, और दोनों प्रारंभ में अपने सभी आरएसएस साझा करते हैं। तो अगर आरएसएस शुरू में 1 जीबी भी था, तो फोर्किंग के बाद परिणाम दो प्रक्रियाएं होगी, प्रत्येक एक आरएसएस के आरएसएस के साथ, लेकिन आप अभी भी केवल 1 जीबी मेमोरी का उपयोग कर रहे हैं।

उलझन में अभी तक? यहां आपको वास्तव में जानने की आवश्यकता है: इसका उपयोग करें free कमांड करें और अपने प्रोग्राम को शुरू करने से पहले और बाद में परिणामों की जांच करें +/- buffers/cache लाइन)। वह अंतर कितना है नया आपके नव-प्रारंभ कार्यक्रम का उपयोग स्मृति।


119
2018-05-05 01:17



"अपने प्रोग्राम को शुरू करने से पहले और बाद में परिणामों की जांच करें", वैकल्पिक रूप से, यूएसएस (अनन्य सेट साइज) का उपयोग करके वापस लौटाएं smem। - Hubert Kario
तो क्या ऐसा कोई उपकरण है जो वास्तविक स्मृति का उपयोग किया जा रहा है, उपकरण जो तीसरे पक्ष नहीं हैं। - CMCDragonkai
@CMCDragonkai हाँ, मुफ़्त। - deviantfan
अगर मैं जावा प्रक्रिया शुरू करता हूं java -Xmx16g RunLong, जो जावा प्रक्रिया के लिए 16 जीबी मेमोरी आरक्षित करेगा, फिर अंदर VIRT शीर्ष पर, ऐसा लगता है कि 16 जीबी गिना जाता है। इस मामले में, इस 16 जीबी मेमोरी का प्रकार क्या है, क्या वह मैप मेमोरी है या ..? - Eric Wang


शीर्ष (1) मैन पेज से:

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.

      VIRT = SWAP + RES.

जहां आरईएस का मतलब निवासी स्मृति (भौतिक स्मृति का उपयोग किया जाता है)।

असल में यह सही नहीं है (अब)। जब यह "स्वैप" कहता है, जिसमें उन फ़ाइलों को भी शामिल किया गया है जो प्रोग्राम ने अपने पता स्थान में मैप किया है, जो वास्तव में वास्तविक RAM का उपभोग नहीं कर सकता है या नहीं। यह स्मृति फ़ाइल समर्थित है लेकिन वास्तव में स्वैप नहीं है।

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


22
2018-05-04 15:43



अच्छी तरह से दिलचस्प है, तो वीआईआरटी = एसडब्ल्यूएपी + आरईएस है, मेरा एसडब्ल्यूएपी उपयोग शून्य कैसे है, जबकि 2 जावा प्रक्रियाओं के लिए वर्चुअल मेमोरी 1 जीबी के करीब है ?? - kapso
मूल रूप से शीर्ष शो .... स्वैप: 1048568k कुल, 0k प्रयुक्त, 1048568k मुक्त, 505728k कैश - kapso
@ user42159 यह जवाब गलत है! मैन टॉप में कोई 'वीआईआरटी = एसडब्ल्यूएपी + आरईएस' नहीं है! -m : VIRT/USED toggle Reports USED (sum of process rss and swap total count) instead of VIRT। यह एक दयालु बात है कि मैं इस जवाब को कम नहीं कर सकता। - duleshi
यह जवाब गलत है। उपयोग = Res + स्वैप आकार (शीर्ष फ़ील्ड प्रबंधन से, शीर्ष पर होने पर एफ कुंजी दबाकर एक्सेस किया जाता है। शीर्ष मैन पेज से भी)। - Jason S


मुझे मिला मुगरेल सुमनारी से स्पष्टीकरण बहुत साफ़:

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

RES निवासी आकार के लिए खड़ा है, जो एक सटीक प्रतिनिधित्व है   एक प्रक्रिया कितनी वास्तविक भौतिक स्मृति का उपभोग कर रही है। (ये भी   सीधे% एमईएम कॉलम से मेल खाता है।) यह लगभग हमेशा होगा   वीआईआरटी आकार से कम हो, क्योंकि अधिकांश कार्यक्रम सी पर निर्भर करते हैं   पुस्तकालय।

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


8
2018-01-27 17:53





पीएस / टॉप आउटपुट में वीआईआरटी कॉलम स्मृति उपयोग को मापने के लिए लगभग अप्रासंगिक है। इसके बारे में चिंता मत करो। अपाचे भारी लोड वीआईआरटी बनाम आरईएस मेमोरी

https://stackoverflow.com/questions/561245/virtual-memory-usage-from-java-under-linux-too-much-memory-used


5
2018-05-04 15:41



धन्यवाद, मैं चिंतित और उलझन में आया, क्योंकि स्वैप उपयोग 0% था, वर्चुअल मेमोरी कॉलम बहुत अधिक है। और मेरे पास कुल 2.7 जीबी भौतिक मेमोरी का केवल 1.7 जीबी है, जबकि वर्चुअल मेमोरी उच्च है? - kapso


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

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

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

ऑपरेटिंग सिस्टम शब्दावली पर एक नोट: कंप्यूटर विज्ञान आमतौर पर स्वैपिंग (अंतरिक्ष को स्वैप करने के लिए पूरी प्रक्रिया लिखने) और पेजिंग (केवल एक निश्चित आकार के हिस्सों को लिखना, आमतौर पर कुछ किलोबाइट लिखना) के बीच अंतर करता है। पेजिंग आमतौर पर अधिक कुशल होती है, और यही लिनक्स करता है, लेकिन परंपरागत लिनक्स शब्दावली वैसे भी स्वैपिंग के बारे में बात करती है।

स्रोत: http://www.faqs.org/docs/linux_admin/x1752.html


2
2018-05-04 15:43



यह उत्तर गलत धारणा फैलता है कि वर्चुअल मेमोरी स्वैपिंग या पेजिंग जैसा ही है। रैम के विस्तार के रूप में डिस्क का उपयोग वर्चुअल मेमोरी को पूर्ववत करता है। और बहुत सारे सिस्टम (जैसे कि सबसे सोहो राउटर) हैं जिनमें वर्चुअल मेमोरी है लेकिन डिस्क का उपयोग रैम के विस्तार के रूप में नहीं करते हैं। (और यह ओपी के सवाल का जवाब नहीं है, क्योंकि वह किसी भी स्वैप का उपयोग नहीं कर रहा है।) - David Schwartz


VIRtual शीर्ष के कॉलम, प्रक्रिया के सुपर-स्पेस (सुपर खपत स्थान) को संदर्भित करता है, जो प्रक्रिया वास्तव में रन टाइम पर नहीं ले सकती है। एक और कॉलम है RESident, जो रनटाइम पर प्रक्रिया द्वारा आवंटित वास्तविक भौतिक स्मृति / स्थान को संदर्भित करता है।

अंतर के कारण, दोनों के बीच, उदाहरण के द्वारा समझा जा सकता है: यदि प्रक्रिया कुछ लाइब्रेरी का उपयोग कर रही है, तो पुस्तकालय का आकार भी सहायता करेगा virtual-size। हालांकि, चूंकि पुस्तकालय का केवल एक हिस्सा उपयोग किया जाएगा (यानी उपयोग में कुछ विधियां), जिससे सहायता मिलेगी resident-size

के लिए संदर्भ लें और जानकारी


2
2018-02-26 14:27





"वीआईआरटी" बस पता स्थान, आरईएस "वास्तविक" स्मृति है, लेकिन "आरईआर" (= साझा) राशि "आरईएस" राशि आरईएस का हिस्सा है जो अन्य प्रक्रियाओं के साथ साझा की जाती है। इसलिए अधिकांश प्रक्रियाओं के लिए, मेरा मानना ​​है कि आरईआर से एसएचआर घटाकर आपको स्मृति की मात्रा मिलती है जो वास्तव में इस विशेष प्रक्रिया के लिए जिम्मेदार है।


0
2018-04-18 23:03