मैं मेमोरी उपयोग की निगरानी कैसे कर सकता हूं?


265

मैंने topफिलहाल मेमोरी का उपयोग देखा है। लेकिन मैं समय की अवधि में मेमोरी के उपयोग की निगरानी करना चाहता हूं। उदाहरण के लिए निगरानी शुरू करें और फिर कुछ कमांड निष्पादित करें, और अंतिम निगरानी को रोकें और देखें कि अवधि के दौरान कितनी मेमोरी का उपयोग किया गया है।

मैं Ubuntu सर्वर पर यह कैसे कर सकता हूं?

मुझे लगता है कि मैं हर 5 वें सेकंड में एक क्रोनजॉब शुरू कर सकता हूं, और एक कमांड को लागू कर सकता हूं जो एक टेक्स्टफाइल में वर्तमान मेमोरी उपयोग को लॉग करता है। लेकिन मुझे वर्तमान मेमोरी उपयोग को एक प्रारूप में प्राप्त करने के लिए किस कमांड का उपयोग करना चाहिए जो पाठ फ़ाइल में लॉग इन करना आसान है?

जवाबों:


322

मैं पिछले उत्तरों के संयोजन की सलाह देता हूं

watch -n 5 free -m

ध्यान दें कि हार्ड ड्राइव ब्लॉकों को कैश करने के लिए लिनक्स किसी भी अतिरिक्त मेमोरी का उपयोग करना पसंद करता है । तो आप सिर्फ मुक्त देखना नहीं चाहते हैं Mem। आप पंक्ति के freeकॉलम को देखना चाहते हैं -/+ buffers/cache:। इससे पता चलता है कि अनुप्रयोगों के लिए कितनी मेमोरी उपलब्ध है। तो मैं बस भाग गया free -mऔर यह मिला:

             total       used       free     shared    buffers     cached
Mem:          3699       2896        802          0        247       1120
-/+ buffers/cache:       1528       2170
Swap:         1905         62       1843

मुझे पता है कि मैं 1528 एमबी का उपयोग कर रहा हूं और 2170 एमबी मुफ्त है।

नोट: इस watchचक्र को रोकने के लिए आप सिर्फ Ctrl+ दबा सकते हैं C


1
धन्यवाद, यह जानकारीपूर्ण है। लेकिन पहले इस्तेमाल किए गए कॉलम पर 2896और फिर 1528बफ़र्स के लिए, इसका मतलब यह नहीं है कि आप उपयोग कर रहे हैं 2896 + 1528?
जोनास

8
Mem: usedआपकी कुल उपयोग की गई मेमोरी है। -/+ buffers/cache: usedआपकी कुल उपयोग की गई मेमोरी माइनस बफ़र्स और कैश है। मुझे पता है कि आउटपुट मज़ेदार लगता है, लेकिन यहां किसी अंकगणित की आवश्यकता नहीं है। आप सिर्फ / / बफ़र्स / कैश पंक्ति में उपयोग / मुफ्त की तलाश कर रहे हैं।
जस्टिन फोर्स

6

1
@frmdstryr अच्छा बिंदु! -ह / - मानव तब मौजूद नहीं था जब मैंने यह लिखा था, हालांकि। gitlab.com/procps-ng/procps/commit/…
जस्टिन फोर्स

3
@ cbradsh1 तुम सिर्फ कर सकते हैं free -h, जैसे watch -n 5 free -h"मानव पठनीय" उत्पादन, जैसे प्राप्त करने 2.1Gके बजाय 2170उत्पादन में।
जस्टिन फ़ोर्स

213

मुझे लगता htopहै कि सबसे अच्छा समाधान है।

  • sudo apt-get install htop

इस तरह से आप देखेंगे कि कौन से प्रोग्राम सबसे अधिक रैम का उपयोग कर रहे हैं। और यदि आप चाहते हैं तो आप आसानी से एक को समाप्त कर सकते हैं। यहाँ एक स्क्रीनशॉट है!


2
htopअच्छा है क्योंकि यह अधिक "चित्रमय" है और संभवतः पढ़ने में आसान है free
mjswensen

1
मैं आउटपुट नहीं समझता। क्या RESMB में मेमोरी का उपयोग उस एप्लिकेशन द्वारा किया जाता है? क्या है SHR?
faizal

1
@ फैज़ल: आभासी, आरक्षित और साझा मेमोरी।
चुड़ैलक्राफ्ट

1
htopआपको 'समय के साथ स्मृति उपयोग' कैसे दिखाता है?
०el

htop -s M_SHARE htop -s TIME
टोमाची

40

यदि आप प्रत्येक चल रही प्रक्रिया द्वारा उपयोग की जाने वाली मेमोरी के एक अच्छे टूटने की तलाश में हैं, तो मैं ps_mem.py ( यहाँ Pixbeat.org पर पाया गया ) की जाँच करने की सिफारिश कर सकता हूँ ।

मैं ऊपर की टिप्पणियों में जानता हूं, आपने मुफ्त में एक-लाइन स्नैपशॉट चाहने का उल्लेख किया था , लेकिन मुझे लगा कि दूसरों को यह उपयोगी लग सकता है।

उदाहरण आउटपुट:

user@system:~$ sudo ps_mem.py
[sudo] password for user:
 Private  +   Shared  =  RAM used       Program

  4.0 KiB +   7.5 KiB =  11.5 KiB       logger
  4.0 KiB +   8.0 KiB =  12.0 KiB       mysqld_safe
  4.0 KiB +  10.0 KiB =  14.0 KiB       getty
  4.0 KiB +  42.0 KiB =  46.0 KiB       saslauthd (5)
 48.0 KiB +  13.0 KiB =  61.0 KiB       init
 56.0 KiB +  27.5 KiB =  83.5 KiB       memcached
 84.0 KiB +  26.5 KiB = 110.5 KiB       cron
120.0 KiB +  50.0 KiB = 170.0 KiB       master
204.0 KiB + 107.5 KiB = 311.5 KiB       qmgr
396.0 KiB +  94.0 KiB = 490.0 KiB       tlsmgr
460.0 KiB +  65.0 KiB = 525.0 KiB       rsyslogd
384.0 KiB + 171.0 KiB = 555.0 KiB       sudo
476.0 KiB +  83.0 KiB = 559.0 KiB       monit
568.0 KiB +  60.0 KiB = 628.0 KiB       freshclam
552.0 KiB + 259.5 KiB = 811.5 KiB       pickup
  1.1 MiB +  80.0 KiB =   1.2 MiB       bash
  1.4 MiB + 308.5 KiB =   1.7 MiB       fail2ban-server
888.0 KiB +   1.0 MiB =   1.9 MiB       sshd (3)
  1.9 MiB +  32.5 KiB =   1.9 MiB       munin-node
 13.1 MiB +  86.0 KiB =  13.2 MiB       mysqld
147.4 MiB +  36.5 MiB = 183.9 MiB       apache2 (7)
---------------------------------
                        208.1 MiB
=================================

 Private  +   Shared  =  RAM used       Program

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


मुझे आश्चर्य है कि क्या स्मृति थ्रेड्स के बीच साझा की गई है। यह प्रक्रियाओं के बीच साझा किया जाता है, है ना? कम से कम विंडोज पर ...
थॉमस वेलर

तो यह मामला, साझा मेमोरी उन पृष्ठों को संदर्भित करता है जो साझा पुस्तकालयों के रूप में कई प्रक्रियाओं द्वारा मैप किए जाते हैं। इसके अतिरिक्त एक बहु-थ्रेडेड अनुप्रयोगों के संदर्भ में पूरी प्रक्रिया मेमोरी स्पेस उस प्रक्रिया में सभी थ्रेड्स द्वारा पहुंच योग्य है।
जेसन मॉक


@ थोमसवेलर: हाँ, थ्रेड्स हमेशा मेमोरी साझा करते हैं, जबकि प्रक्रियाएँ कुछ शर्तों के तहत कुछ या सभी साझा कर सकती हैं।
लेइफ एर्न स्टोर्सेट

इसके लिए मैं gnome-system-monitor

24

फ्री कमांड का उपयोग करें । उदाहरण के लिए, यह निम्नलिखित है free -m:

             total       used       free     shared    buffers     cached
Mem:          2012       1666        345          0        101        616
-/+ buffers/cache:        947       1064
Swap:         7624          0       7624

free -m | grep /+ केवल दूसरी पंक्ति लौटाएगा:

-/+ buffers/cache:        947       1064

धन्यवाद, बहुत अच्छा लग रहा है। तो यह 947मेमोरी उपयोग शून्य से बफ़र्स और कैश के लिए उपयोग की जाने वाली मेमोरी है?
जोनास

11

घड़ी आदेश उपयोगी हो सकता है। watch -n 5 freeहर पाँच सेकंड में अपडेट के साथ मेमोरी उपयोग की निगरानी करने का प्रयास करें ।


धन्यवाद, यह बहुत अच्छा था! हालाँकि, मैं एक लाइन पर मेमोरी उपयोग प्राप्त करना पसंद करूंगा, इसलिए टेक्स्ट फ़ाइल में लॉग इन करना आसान है।
जोनास

8

आप इसका उपयोग कर सकते हैं cat /proc/meminfo

MemTotal:        4039160 kB
MemFree:          309796 kB
MemAvailable:    3001052 kB
Buffers:          345636 kB
Cached:          2341288 kB
SwapCached:            8 kB
Active:          1725160 kB
Inactive:        1551652 kB
Active(anon):     538404 kB
Inactive(anon):    70076 kB
Active(file):    1186756 kB
Inactive(file):  1481576 kB
Unevictable:          32 kB
Mlocked:              32 kB
SwapTotal:       4194300 kB
SwapFree:        4194044 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        589988 kB
Mapped:           255972 kB
Shmem:             18596 kB
Slab:             374888 kB
SReclaimable:     310496 kB
SUnreclaim:        64392 kB
KernelStack:        6976 kB
PageTables:        26452 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     6213880 kB
Committed_AS:    3589736 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
ShmemHugePages:        0 kB
ShmemPmdMapped:        0 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      147392 kB
DirectMap2M:     4046848 kB

1
इस कमांड के सामने घड़ी जोड़ने से यह कमाल हो जाता है! जैसा किwatch cat /proc/meminfo
एल्डर गीक

freeआदेश से इसकी जानकारी लेता है /proc/meminfoऔर उन्हें एक कॉम्पैक्ट तरह से प्रस्तुत करता है। free -hमानव-पठनीय आउटपुट के लिए उपयोग करें ।
LoMaPh

4

समग्र रैम उपयोग की दृश्य निगरानी के लिए, यदि आप बायोबू का उपयोग करते हैं, तो यह आपकी मेमोरी के उपयोग को टर्मिनल के निचले दाएं कोने में रखेगा और आपके किसी भी टर्मिनल सत्र में होने पर चलेगा।

जैसा कि आप स्क्रीनशॉट से देख सकते हैं, मेरी वर्चुअल मशीन में 1h3m अपटाइम, 0.00 लोड है, में 2.8GHz (वर्चुअल) प्रोसेसर है और सिस्टम पर 994MB (21%) रैम उपलब्ध है।

उपयोग में Byobu


3

एकल लाइन समाधान और आउटपुट:

free -m | grep "Mem:"

यहाँ अपेक्षित आउटपुट का एक उदाहरण है:

Mem:           3944         652         302          18        2990        2930

1

मैं कैक्टि का उपयोग करूंगा । यह आपकी मेमोरी उपयोग आदि को समय के साथ ग्राफ़ करेगा, और आप अपने वेब ब्राउज़र का उपयोग करके जांच कर पाएंगे।


1

स्मृति उपयोग की निगरानी

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

एक ubuntu सर्वर पर स्थापित करने के लिए ग्रेफाइट अपेक्षाकृत आसान है और इसे स्थापित करने के लिए, आप इंस्टॉलेशन प्रक्रियाओं का पालन करना आसान के लिए इस लिंक की जांच कर सकते हैं ।

ग्रेफाइट स्थापित होने के बाद, अब, आप इसमें मेमोरी मेट्रिक्स भेज सकते हैं, जिस पर भी आप चाहें; हर 5 सेकंड, हर मिनट, हर घंटे ... आदि।

मेमोरी मेट्रिक्स को ग्राफ़ करने के लिए, जैसा कि पहले से ही पिछली पोस्ट में सुझाया गया है, आप आवश्यक मेमोरी जानकारी को इकट्ठा करने के लिए सिस्टम टूल्स का उपयोग करके अपनी स्क्रिप्ट लिख सकते हैं। या, आप एक पूर्व-लिखित स्नाप प्लगइन का उपयोग कर सकते हैं जो आपके लिए सभी काम करेगा।

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

यदि आप इसके बजाय एक snmp प्लगइन का उपयोग करना चाहते हैं जो पहले से ही आपके लिए सभी आवश्यक गणना करता है, तो यहां एक लिंक है जो बहुत अच्छी तरह से काम करता है: checkMemoryviaSNMP

एसएनएमपी के पेशेवरों:

मैं सभी दूरस्थ नोड्स पर नज़र रखता हूं जिन्हें मैंने मॉनिटर किया है। यह मुझे दूरस्थ नोड्स पर एक प्लगइन कॉपी या डालने के बिना, एक केंद्रीय सर्वर (ओं) से मेरे सभी प्रणालियों की निगरानी करने की अनुमति देता है ।

एसएनएमपी का विपक्ष:

आपको यह सुनिश्चित करना होगा कि आपके द्वारा मेमोरी पर निगरानी रखने के लिए प्रत्येक सुदूर नोड्स पर स्नाप एजेंट स्थापित हो। हालाँकि, यह इंस्टालेशन वन टाइम डील होगी। यदि आप स्वचालन उपकरण जैसे कि शेफ या कठपुतली या इसी तरह के उपकरणों का उपयोग अपने वातावरण में कर रहे हैं, तो यह कोई समस्या नहीं है।

दूरस्थ नोड पर SNMP एजेंट का विन्यास:

Snmp एजेंट को स्थापित करने के बाद, बस vi /etc/snmpd/snmpd.conf फ़ाइल vi करें और इस लाइन को इसमें जोड़ें:

rocommunity  (specify-a-community-string-aka-password-here)

इसके बाद स्नैम्प एजेंट को फिर से शुरू करें:

/etc/init.d/snmpd restart

फिर, अपने केंद्रीय सर्वर पर, जहाँ से आप अपने सभी अन्य सर्वरों की निगरानी करने के बजाय, आप निम्न कमांड चला सकते हैं:

$ time ./checkMemoryviaSNMP -v2 public gearman001.phs.blah.com 30 90 graphite,10.10.10.10,2003,typical
WARNING: Used = [ 3.26154 GB ], Installed = [ 5.71509 GB ], PCT.Used = [ 57.069% ], Available.Memory = [ 2.00291 GB ]. Buffer = [ 137.594 MB ], Cached = [ 1.3849 GB ]. Thresholds: [ W=(30%) / C=(90%) ].  System Information = [ Linux gearman001.phs.blah.com 2.6.32-504.30.3.el6.x86_64 #1 SMP Thu Jul 9 15:20:47 EDT 2015 x86_64 ].

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