एक प्रक्रिया का वास्तविक स्मृति उपयोग


20

निम्नलिखित mysqlऔर apacheमेरे सर्वर पर क्रमशः स्मृति उपयोग हैं । आउटपुट के अनुसार pmap, mysql379M apacheका उपयोग कर रहा है और 277M का उपयोग कर रहा है।

[root@server ~]# pmap 10436 | grep total
 total           379564K

[root@server ~]# pmap 10515 | grep total
 total           277588K

के आउटपुट के साथ तुलना करने पर top, मुझे लगता है कि मान लगभग मेल खा रहे हैं।

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10515 apache    20   0  271m  32m 3132 S  0.0  6.6   0:00.73 /usr/sbin/httpd
10436 mysql     20   0  370m  21m 6188 S  0.0  4.3   0:06.07 /usr/libexec/mysqld --basedir=....

अब ये मूल्य निश्चित रूप से उन दो प्रक्रियाओं का वर्तमान मेमोरी उपयोग नहीं है, क्योंकि अगर यह ramमेरे सिस्टम पर 512M से अधिक हो गया था और मैं इस तथ्य को समझता हूं कि ये इन दो प्रक्रियाओं को सौंपे गए पृष्ठों के आकार हैं और वास्तव में नहीं हैं स्मृति का आकार सक्रिय रूप से उनके द्वारा उपयोग किया जाता है। अब, जब हम उपयोग करते हैं pmap -x, तो मुझे एक अतिरिक्त कोलॉमन दिखाई देता है Dirtyजो प्रक्रिया के लिए स्मृति के कम उपयोग को दर्शाता है। जैसा कि नीचे दिए गए उदाहरण शो में देखा गया है, Dirtyकोलमॉन 15 मीटर दिखाता है, जबकि पहले कोलमॉन में 379M है। मेरा प्रश्न है: क्या कोलॉम्न के तहत मूल्य Dirtyउस प्रक्रिया द्वारा सक्रिय रूप से उपयोग की जाने वाली स्मृति की 'वास्तविक' राशि है? यदि यह नहीं है, तो हम किसी प्रक्रिया के वास्तविक मेमोरी उपयोग का पता कैसे लगा सकते हैं? नहीं psऔर topइसके बाद के संस्करण में एक ही कारण के लिए। क्या हमारे पास कुछ भी है/proc यह जानकारी देगा?

[root@server ~]# pmap -x 10436 | grep total
total kB          379564   21528   15340
[root@server ~]#


[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:           489        447         41          0         52        214
-/+ buffers/cache:        180        308
Swap:         1023          0       1023
[root@server ~]#

जवाबों:


18

ऐसा कोई आदेश नहीं है जो "किसी प्रक्रिया का वास्तविक मेमोरी उपयोग" देता हो क्योंकि प्रक्रिया की वास्तविक मेमोरी उपयोग जैसी कोई चीज नहीं है

प्रक्रिया का प्रत्येक मेमोरी पेज (अन्य भेदों के बीच) हो सकता है:

  • अकेले उस प्रक्रिया द्वारा उपयोग किया जाने वाला क्षणिक भंडारण।
  • विभिन्न प्रक्रियाओं का उपयोग करके अन्य प्रक्रियाओं के साथ साझा किया गया।
  • एक डिस्क फ़ाइल द्वारा समर्थित।
  • भौतिक स्मृति या स्वैप में।

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

द्वारा प्रदर्शित जानकारी pmapसे और आता है । यह प्रक्रिया का वास्तविक मेमोरी उपयोग है - इसे एक संख्या द्वारा संक्षेप में प्रस्तुत नहीं किया जा सकता है।/proc/PID/maps/proc/PID/smaps


6

मैं एक आवेदन के लिए मैन पेज में लिखी गई कुछ बातों का हवाला दूंगा जो शीर्ष स्रोतों के समान विश्लेषण करता है और उसी स्रोतों से जानकारी खींचता है pmapजैसे (उदाहरण /proc/[N]/maps):

वायरल ADDRESS स्पेस वी.एस. भौतिक स्मृति

उपरोक्त कुछ आंकड़ों की व्याख्या करने में वर्चुअल एड्रेस स्पेस और भौतिक मेमोरी के बीच अंतर को समझना महत्वपूर्ण है । जैसा कि नाम से पता चलता है, वर्चुअल एड्रेस स्पेस वास्तविक नहीं है; यह मूल रूप से एक प्रक्रिया के लिए आवंटित सभी मेमोरी का एक नक्शा है। इस नक्शे के आकार की सीमा प्रत्येक प्रक्रियाओं (आमतौर पर, 2-4 जीबी) के लिए समान है, और यह संचित नहीं है (यानी, आपके पास दर्जनों या सैकड़ों प्रक्रियाएं हो सकती हैं, प्रत्येक का अपना 2-4 जीबी वर्चुअल पता है अंतरिक्ष, एक प्रणाली पर जो वास्तव में केवल 512 एमबी भौतिक मेमोरी है )।

डेटा को वास्तव में वर्चुअल एड्रेस स्पेस से संग्रहीत या पुनर्प्राप्त नहीं किया जा सकता है; वास्तविक डेटा को वास्तविक, भौतिक मेमोरी की आवश्यकता होती है। दूसरे के संबंध में एक का प्रबंधन करना कर्नेल का काम है। वर्चुअल स्पेस आँकड़े (VirtualSz, Data + Stack, और Priv & Write) एक प्रक्रिया की संरचना और भौतिक मेमोरी उपयोग के संबंध पर विचार करने के लिए उपयोगी हैं, लेकिन वास्तव में उपयोग की जाने वाली RAM की मात्रा के संबंध में, भौतिक मेमोरी आँकड़े (ResidentSz, Share और) आनुपातिक) क्या मायने रखता है।

pmapज्यादातर आपको वर्चुअल एड्रेस स्पेस के बारे में जानकारी देता है । आपका अवलोकन कि topआउटपुट में "मान लगभग मेल खा रहे हैं" संभवतः वीआईआरटी आंकड़े को संदर्भित करता है, जो आरईएस आंकड़े से बहुत अलग है। ये बिल्कुल वही है जो ऊपर मैंने "VirtualSz" और "ResidentSz" लेबल किया है (VIRT आभासी के लिए है, रेज निवासी के लिए है)।

अब, जब हम pmap -x का उपयोग करते हैं, तो मुझे एक अतिरिक्त कोलमॉन डर्टी दिखाई देती है जो प्रक्रिया के लिए स्मृति के कम उपयोग को दर्शाती है। जैसा कि नीचे दिए गए उदाहरण शो में देखा गया है, डर्टी कॉलॉउन 15M को दिखाता है, जबकि पहले कोलमॉन में 379M है। मेरा प्रश्न है: क्या कोलमॉन डर्टी के तहत मूल्य उस प्रक्रिया द्वारा सक्रिय रूप से उपयोग की जाने वाली स्मृति की 'वास्तविक' राशि है?

नहीं, लेकिन क्रमबद्ध। "डर्टी" मेमोरी डेटा को संदर्भित करती है जिसे डिस्क से लोड किया गया है और बाद में संशोधित किया गया है; चूंकि इसे संशोधित किया गया है, इसलिए इसे निवासी मेमोरी का हिस्सा होना चाहिए क्योंकि ये परिवर्तन वर्तमान में रैम में संग्रहीत हैं। हालाँकि, यह इसका पर्याय नहीं है।


मैं सहमत हूँ। हालाँकि 2 से 4GB 32 बिट सिस्टम के लिए है। इन दिनों अधिकांश सिस्टम शायद 64 बिट हैं।
ctrl-alt-delor

3

वर्चुअल मेमोरी स्पीड डायल नंबरों की तरह है, सिवाय 3 बिलियन या उनके (32 बिट सिस्टम के लिए, 4 बिलियन 32 बिट ऐप के लिए 64 बिट कर्नेल पर, 64 बिट एप्लिकेशन के लिए बहुत अधिक), और आप डायरेक्ट नंबर डायल नहीं कर सकते, उनके पास है डायल करने के लिए मैप किया जाए।

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

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

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