मैं कैसे पता लगा सकता हूँ कि प्रक्रियाएँ स्वैप स्थान का उपयोग कर रही हैं?


10

मेरे पास 9GB स्वैप उपयोग के बारे में एक linux सर्वर शीर्ष रिपोर्ट है: ऊपर

लेकिन मैं यह समझ नहीं पा रहा हूं कि यह स्वैप का उपयोग कहां करता है, कुछ Google परिणामों ने कहा कि शीर्ष - Oकॉमाड फॉलो pद्वारा प्रक्रिया द्वारा स्वैप उपयोग दिखाया जाएगा। लेकिन जैसा कि ऊपर चित्र में दिखाया गया है, SWAP कॉलम का एक संक्षिप्त योग लेने से पता चलता है कि> 10GB स्वैप का उपयोग किया जाता है, इसलिए स्वैप उपयोग के लिए 9GB आंकड़ा कहां से आता है?

शीर्ष रिपोर्ट कि राम के बारे में 96492kb बफ़र्स द्वारा उपयोग किया जाता है। क्या इसका उपयोग करने के लिए मैं स्वैप का उपयोग करने के बजाय कुछ भी कर सकता हूं?


1
शीर्ष (प्रति व्यक्ति पृष्ठ) SWAP को वायरल - भौतिक राम उपयोग की गणना करता है। मेरे प्रयोगों से पूरी तरह से सही नहीं है।
लोर्निक्स

जवाबों:


6

यह संभव है कि कई प्रोग्राम एक ही स्वैप क्षेत्र का उपयोग करेंगे, इसलिए इसे दो बार सूचित किया जाएगा।

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


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


मुझे नहीं लगता कि साझा पुस्तकालयों को स्वैप के रूप में गिना जाना चाहिए, क्योंकि जब सिस्टम स्टार्ट-अप, कोई स्वैप उपयोग नहीं होता है, लेकिन कई साझा पुस्तकालय लोड होते हैं। वैसे भी, मैं देख रहा हूं कि मेरा सिस्टम लगभग 9GB स्वैप विभाजन का उपयोग करता है, मैं बस यह पता लगाना चाहता हूं कि किस प्रक्रिया में स्वैप का सबसे अधिक उपयोग किया गया है (शेयर लाइब्रेरी, मेमोरी मैप फ़ाइल को बाहर करें ...)
secmask

3

पार्सिंग / खरीद उपनिर्देशिका काम करता है:

बैश स्क्रिप्ट के रूप में:

for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done

सॉर्ट करने के लिए पाइपिंग द्वारा आउटपुट को हाई-लो सॉर्ट किया जा सकता है:

{blah}| sort -rn

अपनी इच्छा के अनुसार अपनी पसंदीदा भाषा में इस सप्ताह को फिर से लिखें। मेरा अक्क-फू मजबूत नहीं है।

(कट-एन-pastable)

#!/bin/bash
#
# show swap used by processes
#
(for PROCESS in /proc/*/; do
  swapused=$(awk 'BEGIN { total = 0 } /^Swap:[[:blank:]]*[1-9]/ { total = total + $2 } END { print total }' ${PROCESS}/smaps 2>/dev/null || echo 0)
  if [ $swapused -gt 0 ]; then
    /bin/echo -e "${swapused}k\t$(cat ${PROCESS}/cmdline)"
  fi
done ) | sort -nr


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