Bellek kullanımını nasıl izleyebilirim?


265

topŞu anda hafıza kullanımını gördüm . Ancak bir süre içinde bellek kullanımını izlemek istiyorum. Örneğin, izlemeye başlayın ve ardından birkaç komut uygulayın ve son olarak izlemeyi durdurun ve dönem boyunca ne kadar hafıza kullanıldığını görün.

Bunu Ubuntu Sunucusunda nasıl yapabilirim?

Sanırım her 5 saniyede bir cronjob başlatabilirim ve mevcut bellek kullanımını bir metin dosyasına kaydeden bir komutu çağırabilirim. Ancak mevcut bellek kullanımını bir metin dosyasına kaydedilmesi kolay bir biçimde almak için hangi komutu kullanmalıyım?

Yanıtlar:


322

Önceki cevapları birleştirmenizi öneririm

watch -n 5 free -m

Linux'un sabit disk bloklarını önbelleğe almak için fazladan bir bellek kullanmayı sevdiğini unutmayın . Demek sadece bedavaya bakmak istemiyorsun Mem. Satırın freesütununa bakmak istersiniz -/+ buffers/cache:. Bu, uygulamalar için ne kadar hafıza kullanılabilir olduğunu gösterir. Ben de koştum free -mve şunu aldım:

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

1528 MB kullandığımı ve 2170 MB boş olduğumu biliyorum .

Not: Bu watchçevrimi durdurmak için sadece Ctrl+ tuşuna basabilirsiniz C.


1
Teşekkürler, bu bilgilendirici. Fakat önce kullanılan sütunda 2896ve sonra 1528arabelleklerde, bu kullandığınız anlamına gelmiyor 2896 + 1528mu?
Jonas

8
Mem: usedToplam kullanılan hafıza. -/+ buffers/cache: usedToplam kullanılan bellek eksi arabellekleri ve önbellek. Çıktının komik göründüğünü biliyorum, ama burada aritmetik gerekli değil. Siz sadece - / + tamponları / önbellek satırında kullanılmış / ücretsiz arıyorsunuz.
Justin Force

6
-H seçeneği çok daha güzel
frmdstryr 19:17

1
@frmdstryr İyi nokta! -h / - Bunu yazdığımda insan yoktu. gitlab.com/procps-ng/procps/commit/…
Justin Force

3
@ cbradsh1 free -hÖrneğin, örneğin watch -n 5 free -hçıktı 2.1Gyerine "insan tarafından okunabilir" çıktı elde etmek için yapabilirsiniz 2170.
Justin Force

213

Bence htopen iyi çözüm bu.

  • sudo apt-get install htop

Bu şekilde hangi programların en çok RAM kullandığını göreceksiniz. ve isterseniz kolayca sonlandırabilirsiniz. İşte bir ekran görüntüsü!


2
htopgüzel çünkü daha "grafiksel" ve okumaktan daha kolay free.
mjswensen

1
çıktıyı anlamıyorum. Mı RESMB o uygulama tarafından kullanılan bellek? O zaman ne SHR?
faizal

1
@faizal: sanal, ayrılmış ve paylaşılan hafıza.
WitchCraft

1
htop'bir süre zarfında hafıza kullanımı' nasıl gösterir?
dangel 0

htop -s M_SHARE htop -s ZAMAN
Tomachi

40

Her çalışan işlem tarafından kullanılan hafızanın güzel bir dökümünü arıyorsanız, o zaman ps_mem.py ( burada pixelbeat.org adresinde bulunur) kontrol etmenizi önerebilirim.

Yukarıdaki yorumlarda, ücretsiz olarak tek satırlık bir anlık görüntü almak istediğinizden bahsettiniz , ancak başkalarının da bunu yararlı bulabileceğini düşündüm.

Örnek çıktı:

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

Sevmediğim tek bölüm, betiğin kök ayrıcalıkları gerektirdiğini iddia etmesi. Bunun neden böyle olduğunu tam olarak görme fırsatım olmadı.


Hafızanın konular arasında paylaşılıp paylaşılmadığını merak ediyorum. İşlemler arasında paylaşılıyor, değil mi? En azından Windows'ta ...
Thomas Weller

Bu durumda, paylaşılan hafıza, paylaşılan kütüphaneler şeklinde birden fazla işlem tarafından eşlenen sayfalara atıfta bulunur. Ek olarak, çok iş parçacıklı uygulamalar bağlamında, işlem hafızasının tümüne o işlemdeki tüm iş parçacıkları tarafından erişilebilir.
Jason Mock,

4
Şimdi PyPI ( pip install ps_mem) ve GitHub'da kullanılabilir .
Leif Arne Storset,

@ThomasWeller: Evet, iş parçacığı her zaman belleği paylaşır, oysa işlemler belirli koşullar altında bazılarını veya tümünü paylaşabilir.
Leif Arne Storset,

bunun için gnome-system-monitor kullanıyorum

24

Free komutunu kullanın . Örneğin, bu çıkarımı 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 /+ sadece ikinci satırı döndürür:

-/+ buffers/cache:        947       1064

Teşekkürler, harika görünüyor. Yani bu 947bellek kullanımı eksi tamponlar ve önbelleklerde kullanılan belleği mi?
Jonas

11

İzle komutu yararlı olabilir. watch -n 5 freeHer beş saniyede bir güncelleme ile hafıza kullanımını izlemeye çalışın .


Teşekkürler, bu harikaydı! Ancak, bellek kullanımını tek bir satırda almayı tercih ederim, bu yüzden bir metin dosyasına giriş yapmak kolaydır.
Jonas

8

Kullanarak yapabilirsiniz 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
Bu komutun önüne saat eklemek onu harika kılıyor! olarakwatch cat /proc/meminfo
Elder Geek

freeKomut onun bilgileri alır /proc/meminfove kompakt bir şekilde bunları sunar. free -hİnsan tarafından okunabilir çıktı için kullanın .
LoMaPh

4

Genel RAM kullanımının görsel olarak izlenmesi için, Byobu kullanıyorsanız , bellek kullanımınızı terminalin sağ alt köşesinde tutar ve herhangi bir terminal oturumundayken çalışır.

Ekran görüntüsünden görebileceğiniz gibi, sanal makinemde 1h3m çalışma süresi, 0.00 yük, 2.8GHz (sanal) işlemci ve 994 MB (% 21) sistemde mevcut RAM var.

Byobu kullanımda


3

Tek hat çözümü ve çıktı:

free -m | grep "Mem:"

Beklenen çıktıya bir örnek:

Mem:           3944         652         302          18        2990        2930

1

Cacti'yi kullanırdım . Bu, belirli bir süre boyunca hafıza kullanımınızı vb. Grafikler ve web tarayıcınızı kullanarak kullanımı kontrol edebilirsiniz.


1

Bellek Kullanımını İzleme

Daha çok bellek kullanımını izlemek için harika bir yol olarak Cacti'den bahseden önceki yayınlardan birine paralelim. Ancak, kaktüsler artık ana akımda popüler olmadığı için, Grafit adı verilen alternatif bir grafik uygulaması var.

Grafit, bir ubuntu sunucuya kurmak nispeten kolaydır ve kurmak için, kurulum prosedürlerinin izlenmesi kolay olan bu bağlantıya göz atabilirsiniz .

Grafit yüklendikten sonra, şimdi, istediğiniz aralıkta, ona bellek ölçümleri gönderebilirsiniz; her 5 saniyede bir, her dakika, her saat ... vb.

Bellek ölçümlerini grafik olarak çizmek için, daha önceki yayınlarda önerildiği gibi, gerekli komut bilgilerini toplamak için sistem araçlarını kullanarak kendi komut dosyanızı yazabilirsiniz. Veya, tüm işi sizin için yapacak olan önceden yazılmış bir snmp eklentisini kullanabilirsiniz.

Kendi bellek betiğinizi yazmak istiyorsanız, kullanılmış belleği hesaplarken arabelleğe alınan ve önbelleğe alınmış belleği hesaba katarsanız, aksi halde yanlış veri toplamanız gerekecektir.

Bunun yerine, zaten sizin için gerekli tüm hesaplamaları yapan bir snmp eklentisini kullanmak istiyorsanız, işte size oldukça iyi çalışan bir link: checkMemoryviaSNMP .

SNMP'nin Artıları:

İzlediğim tüm uzak düğümlere snmp kurulu. Bu , uzaktaki düğümlere bir eklenti kopyalamak veya koymak zorunda kalmadan tüm sistemlerimi tek bir merkezi sunucudan izlememe izin veriyor .

SNMP Eksileri:

Snmp aracısının , belleği izlemek istediğiniz uzak düğümlerin her birine kurulu olduğundan emin olmanız gerekir . Ancak, bu kurulum tek seferlik bir anlaşma olacak. Aşçı veya kukla gibi otomasyon araçlarını veya ortamınızdaki benzer araçları kullanıyorsanız, bu hiç sorun değil.

Uzak düğümdeki SNMP aracısının yapılandırması:

Snmp aracısı yüklendikten sonra, sadece /etc/snmpd/snmpd.conf dosyasını vi ve bu satırı buna ekleyin:

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

Sonra snmpd aracısını yeniden başlatın:

/etc/init.d/snmpd restart

Ardından, diğer sunucularınızı izlemek istediğiniz merkezi sunucunuzda aşağıdaki komutu çalıştırabilirsiniz:

$ 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.