मेरे स्वैप (उबंटू) का उपयोग क्या है?


30

मेरे पास एक Ubuntu 8.04 सर्वर है जो एक डेटाबेस और जावा एप्लिकेशन सर्वर का एक गुच्छा चला रहा है। इसकी मेमोरी कॉन्फ़िगरेशन और उपयोग है:

             total       used       free     shared    buffers     cached
Mem:      16456176   15930028     526148          0      81372    9674196
-/+ buffers/cache:    6174460   10281716
Swap:      1951888     366100    1585788

मैंने देखा कि स्वैप हर दोपहर को जाता है, और रात में कुछ समय जारी किया जाता है। मांग सभी दिनों में समान नहीं है, और अलग-अलग समय पर शुरू होती है। तो यह बहुत यादृच्छिक है, फजी "दोपहर-रात" सीमा को छोड़कर।

इस मशीन पर लोड दिन के दौरान बदलता रहता है। यह आधी रात और 6-7 बजे के बीच बहुत कम है, 6-8 बजे तक बहुत अधिक (लेकिन स्थिर) है, फिर धीरे-धीरे गिर रहा है।

अब मेरे पास निम्नलिखित प्रश्न हैं:

  1. मैं कैसे देख सकता हूँ कि कौन सी प्रक्रियाएँ स्वैप का उपयोग कर रही हैं?
  2. यह कैश से कुछ मेमोरी लेने के बजाय स्वैप करना क्यों पसंद करता है?

जवाबों:


25

आपके द्वारा उपयोग किए जाने वाले स्वैप उपयोग पैटर्न आश्चर्यजनक नहीं लगते हैं। वे कुछ स्थायी रूप से चलने वाली प्रक्रियाओं के अनुरूप हैं, जिनका उपयोग शायद ही कभी किया जाता है। दिन के दौरान, उच्च गतिविधि के कारण, शायद ही कभी उपयोग किए जाने वाले पृष्ठ लगभग हमेशा स्वैप में होते हैं। रात में, रैम में उनके लिए अधिक जगह होती है।

आप विभिन्न प्रकार के प्रत्येक प्रक्रिया में उपयोग कर रहा है की कितना स्मृति का एक झलक मिल सकती है topया htop। न तो डिफ़ॉल्ट रूप से स्वैप उपयोग दिखाएं, लेकिन दोनों को (शीर्ष: प्रेस fऔर SWAPस्तंभ पर स्विच ; htop: press F2, NSWAPस्तंभ जोड़ें ) में कॉन्फ़िगर किया जा सकता है । आप किसी विशेष प्रक्रिया के बारे में अधिक जानकारी प्राप्त कर सकते हैं कि प्रक्रिया आईडी cat /proc/12345/vmstatकहां 12345है। ध्यान दें कि "एक प्रोग्राम कितना स्वैप कर रहा है" पूरी तरह से परिभाषित नहीं है, क्योंकि कुछ पृष्ठ कई प्रक्रियाओं द्वारा साझा किए जाते हैं।

रैम के लिए दो प्रमुख प्रकार के प्रतियोगी हैं: प्रोसेस मेमोरी (जिसे स्वैप किया जा सकता है) और डिस्क कैश (जो एक फ़ाइल से फिर से पढ़ा जा सकता है)। डिस्क कैश पर हमेशा प्रक्रिया मेमोरी को प्राथमिकता देने का कोई कारण नहीं है: प्रक्रिया मेमोरी का शायद ही कभी उपयोग किए जाने वाले हिस्से को स्वैप करना बेहतर होता है, ताकि फाइल को बार-बार मेमोरी में पढ़ते रहें। डिस्क कैश के लिए समर्पित मेमोरी के लगभग आधे (कहते हैं 30% -70%) के साथ आपके द्वारा दिए गए आंकड़े, उन प्रणालियों के लिए विशिष्ट हैं जिनके पास उन कार्यों के लिए उचित मात्रा में रैम है जो वे करने वाले हैं।


6
मुझे एक NSWAPकॉलम नहीं मिल रहा है (Ubuntu 16.04: /)।
17

1
@jjmontes इसे हटा दिया गया है । मुझे पता नहीं क्यों।
गिल्स एसओ- बुराई को रोकना '

Htop पूछे जाने वाले प्रश्न कहा गया है कि लेखक इसे ठीक ढंग से अदला-बदली उपयोग रिपोर्ट करने के लिए संभव है पर विश्वास नहीं करता, और कहा कि शीर्ष के मीट्रिक गलत है।
ओलिवर इवांस

0

StackOverflow पर, आपके पहले प्रश्न पर एक उत्कृष्ट उत्तर पहले से ही है ("वास्तव में कौन सी प्रक्रिया स्वैप का उपयोग कर रही है?")।

/programming//a/7180078/1442301

संक्षेप में, जैसे उपकरण स्वैप उपयोग के बारे में बिल्कुल भी सटीक जानकारी प्रदान नहीं करते हैं topया htopनहीं करते हैं। अधिक सटीक जानकारी प्राप्त करने के लिए आपको /procफ़ोल्डर में (छद्म फ़ाइल में /proc/$PID/smaps) गोता लगाना चाहिए ।

पोस्ट ऊपर उल्लेख किया है इस जानकारी को एक अच्छा तरीका में गूँजती प्राप्त करने के लिए एक छोटी खोल स्क्रिप्ट में शामिल है।


0

साथ htop v1.01, मैं "एस" दबाया जोड़ने के लिए NSWAP"F2" के बजाय स्तंभ (के रूप में गाइल्स सुझाव दिया), तो Columns> Available Columns> और F5इसे जोड़ने के लिए।

यहाँ छवि विवरण दर्ज करें


मेरे पास 2.0.1 है और मैं NSWAP विकल्प नहीं देखता :(
एडम

1
@ अदम इस जानकारी को प्राप्त करने का कोई विश्वसनीय तरीका नहीं होने के कारण मुख्य वक्ता अब इस स्तंभ को नहीं दिखाना चाहते हैं; देखें कि शीर्ष की तरह एक स्वैप कॉलम की सुविधा क्यों नहीं है?
Genjo

0

मतदान और उपकरण के आउटपुट को पार्स किए बिना vmstat, freeऔर top, देखने के लिए सबसे अच्छी जगह रूट उपयोगकर्ता या सिस्टम पर अन्य उपयोगकर्ताओं के crontabs हो सकते हैं। यदि सिस्टम पर सामान्य भार एक निश्चित समय पर मज़बूती से फैलता है, तो संभावना है कि क्रोन में एक प्रक्रिया है जो संसाधनों की आवश्यकता पैदा करती है। अन्यथा आप हमेशा उपयोगिता के साथ घेटो फेंकने वाली लॉगिंग उपयोगिता बना सकते हैं script, जो एसटीडीयूएसटी में जाने वाली हर चीज को रिकॉर्ड करती है।

इसलिए अगर मुझे बाद में निरीक्षण के लिए आउटपुट को पकड़ने के लिए एक-एक थ्रोअवे स्क्रिप्ट की जरूरत होती है, तो एक टर्मिनल में मैं टाइप करूंगा:

script /tmp/free.txt

और फिर

while (true); do date; free; sleep 30; done

और दूसरे टर्मिनल में

script /tmp/top.txt

और फिर

while (true); do date; top -n 1; sleep 30; done

और फिर अगली सुबह, दोनों scriptइनवोकेशन को मार दें और के आउटपुट से मिलान करें topऔरfree

एक बार फिर यह एक यहूदी बस्ती है, लेकिन ऐसा लगता है कि आपको केवल एक बंद की आवश्यकता है

आप ubuntu स्वैप गाइड भी पढ़ना पसंद कर सकते हैं

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