Bir uygulamanın veya sürecin gerçek bellek kullanımı nasıl ölçülür?


712

Bu soru burada ayrıntılı olarak ele alınmaktadır.

Linux'ta bir uygulamanın veya sürecin bellek kullanımını nasıl ölçersiniz?

Blog makalesinden Linux üzerinde anlaşılması bellek kullanımı , psbu niyet için kullanımına doğru bir araç değildir.

Neden ps"yanlış"

Nasıl baktığınıza bağlı olarak ps, işlemlerin gerçek bellek kullanımını bildirmez. Gerçekten yaptığı şey, çalışan tek işlem olsaydı her işlemin ne kadar gerçek bellek alacağını göstermektir . Tabii ki, tipik bir Linux makinesinin herhangi bir zamanda çalışan birkaç düzine işlemi vardır, bu da bildirilen VSZ ve RSS numaralarının psneredeyse kesinlikle yanlış olduğu anlamına gelir .


6
Bu soru muhtemelen bugünlerde onun yerine serverfault.com'a ait, ancak "taşınmak için çok eski" olduğunu söylüyor. Aslında kapatmak istemiyorum ...
thomasrutter


2
Aslında psnerede, sanal ve ikamet bellek numaralarını gösterir - bile göstermiyor sanal ayrılmış her bir sayfayı (asla olur) kullanılan proses teorik olarak (asla) sadece süreç olduğunu kullanabiliriz maksimum bellek miktarı olduğu ve hiçbir sayfayı eşlemedi veya eşlemesini kaldırma (olası değil). İken ikamet kadar sanal bellek şu anda fiziksel eşleştirilmiş nasıl gösterir. Tipik virt > usage > resancak 64 bit sistemde virt ~= res*10bu çok geniş bu.
Dima Tisnek

5
Bağlantılı makaleden alıntı tamamen saçmalıktır. RSS aslında kullanılan fiziksel bellektir ve VSZ, işlem tek çalışan olsa bile fiziksel bellek kullanımına çevirebilir veya çevirmeyebilir.
David Schwartz

Yanıtlar:


356

İle psbenzer araçlar ya da sadece o işlem tarafından ayrılan bellek sayfalarının miktarını alacak. Bu sayı doğrudur, ancak:

  • uygulama tarafından kullanılan gerçek bellek miktarını değil, yalnızca kendisine ayrılan bellek miktarını yansıtmaz

  • sayfalar örneğin birkaç iş parçacığı veya dinamik olarak bağlanmış kitaplıklar kullanılarak paylaşılıyorsa yanıltıcı olabilir

Uygulamanızın gerçekten ne kadar bellek kullandığını gerçekten bilmek istiyorsanız, bunu bir profiler içinde çalıştırmanız gerekir. Örneğin, valgrindkullanılan bellek miktarı ve daha da önemlisi programınızdaki olası bellek sızıntıları hakkında size fikir verebilir. Valgrind'in yığın profiler aracına 'masif' denir:

Massif bir yığın profileridir. Bir programın yığınının düzenli anlık görüntülerini alarak ayrıntılı yığın profili gerçekleştirir. Programın hangi bölümlerinin en fazla bellek ayırmasından sorumlu olduğu hakkında bilgi de dahil olmak üzere, zaman içinde yığın kullanımını gösteren bir grafik oluşturur. Grafik, en fazla belleğin nereye tahsis edildiğini belirlemek için daha fazla bilgi içeren bir metin veya HTML dosyası ile desteklenir. Massif programları normalden yaklaşık 20 kat daha yavaş çalıştırır.

Valgrind belgelerinde açıklandığı gibi , programı valgrind aracılığıyla çalıştırmanız gerekir:

valgrind --tool=massif <executable> <arguments>

Massif bellek kullanımı anlık görüntüleri dökümü yazar (örn. massif.out.12345). Bunlar, (1) bellek kullanımı için bir zaman çizelgesi, (her bir anlık görüntü için (2), program belleğinizde nereye tahsis edildiğinin bir kaydını sağlar. Bu dosyaları analiz etmek için harika bir grafik aracı masif-görselleştiricidir . Ama ms_printvalgrind ile birlikte gelen basit bir metin tabanlı aracın zaten çok yardımcı olduğunu buldum.

Bellek sızıntılarını bulmak için memcheckvalgrind (varsayılan) aracını kullanın.


44
Valgrind tarafından üretilen sonuçları yorumlamak için alleyoop'u tavsiye edebilirim. Çok süslü değil ve sızıntı kaynaklarını bulmak için bilmeniz gerekenler anlatıyor. Yardımcı programlar güzel bir çift.
Dan

6
(A) maddesi doğrudur. Kullanılan sayfalar ve uygulama tarafından malloc (), new, vb. Çağrılarıyla gerçekte tahsis edilen bellek arasında bir fark vardır. Yerleşik kullanım, disk belleği olan belleğin ne kadarının RAM'de yerleşik olduğunu gösterir.
jcoffland

63
Bu gerçekten valgrind kullanarak nasıl bellek kullanımı elde etmek için değil mi?
Matt Joiner

11
varsayılan valgrind aracı, memcheck, bellek sızıntılarını tespit etmek için yararlıdır, ancak gerçekten bir bellek profili oluşturucu değildir. Bunun için valgrind --tool = masif.
Todd

3
@DavidSchwartz İfadenizin benimkiyle nasıl çeliştiğini görmüyorum. Söylediklerimi okumaktan çok “yanlış” olduğum konusunda çok endişelendiğini hissediyorum. Burada tüm mesele RSS, uygulamanın gerçek bellek kullanımı için yanlış bir ölçüdür ve son iki cümlenizde de aynı noktayı yapıyorsunuz. Gerçekten, ilk etapta RSS büzülmesini açmamın sebebinin ne olduğunu düşünüyordun? Yani bana bahsettiğim şeyle "yanlış" olduğunu kanıtlamak için bana heceledin? Bana karşı tutumun yorucu.
ypnos

281

Pmap komutunu deneyin :

sudo pmap -x <process pid>

45
sudo ile çalıştırın ya da hata vermez ve tüketilen belleği göstermez.
Matt

22
OSX'te mevcut değil (buraya google'dan gelen herkes için)
jcollum

3
Bu sorunun tam cevabı! ps. Kabuğumda, pmap işlemi sudo olmadan okuyabilir.
MasterControlProgram

7
Re OS X (görünüşe göre OP'nin endişesi değil), vmmap (1)
jrg

not: tamamen farklı bir cevap veriyorgnome-system-monitor
ribamar

190

Kesin olarak söylemek zor, ama burada yardımcı olabilecek iki "yakın" şey var.

$ ps aux 

size Sanal Boyut (VSZ) verecek

Ayrıca / proc dosya sisteminden ayrıntılı istatistikleri /proc/$pid/status

En önemlisi, verene yakın olması gereken VmSize'dir ps aux.

/ proc / 19420 $ kedi durumu
İsim: firefox
Devlet: S (uyku)
Tgid: 19420
Pid: 19420
PPid: 1
TracerPid: 0
Kullanıcı adedi: 1000 1000 1000 1000
Gid: 1000 1000 1000 1000
FDS boyutu: 256
Gruplar: 4 6 20 24 25 29 30 44 46107109111512001 
VmPeak: 222956 kB
Boyut: 212520 kB
VmLck: 0 kB
VmHWM: 127912 kB
VmRSS: 118768 kB
VmData: 170180 kB
VmStk: 228 kB
VmExe: 28 kB
VmLib: 35424 kB
VmPTE: 184 kB
Konular: 8
SigQ: 0/16382
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
İşaret: 0000000020001000
SigCgt: 000000018000442f
CapInh: 0000000000000000
CapPrm: 0000000000000000
Kapasite: 0000000000000000
Cpus_allowed: 03
Mems_allowed: 1
gönüllü_ctxt_switches: 63422
gönüllü olmayan_ctxt_switches: 7171


21
Bir şey mi kaçırıyorum? Soru, ps'de bildirilen VSZ ve RSS'nin yanıltıcı olduğu göz önüne alındığında, bir işlemle bellek kullanımının nasıl daha iyi ölçüleceğini sordu. Cevabınız, yanıltıcı olduğu belirtilen değerin VSZ'ye nasıl bakılacağını detaylandırıyor.
thomasrutter

16
@thomasrutter Evet, orijinal soruyu kaçırıyorsunuz (rev 1), birkaç kez düzenlendi ve oldukça eski (2008). Orijinal soru, bir sürecin bellek kullanımını nasıl ölçeceğini sordu. Yine de, işler eskiyse soruları ve cevapları düzenlemekten çekinmeyin. :)
DustinB

1
not: tamamen farklı bir cevap veriyorgnome-system-monitor
ribamar

131

Linux'un son sürümlerinde, smaps alt sistemini kullanın . Örneğin, 1234 PID'si olan bir işlem için:

cat /proc/1234/smaps

Size tam olarak ne kadar bellek kullandığını söyleyecektir. Daha da önemlisi, belleği özel ve paylaşılan olarak böler, böylece programın birden çok örneği arasında paylaşılan bellek eklemeden, program örneğinizin ne kadar bellek kullandığını anlayabilirsiniz .


sanırım pmapdaha basit bir arayüz.
ribamar

126

Bunu hesaplamanın kolay bir yolu yoktur. Ancak bazı insanlar iyi yanıtlar almaya çalıştı:


güzel bir bellek ve işlem listesi çıktı
Rubytastic

Oldukça akıllı gruplama ile çok güzel.
Rohmer

Yeap, gerçekten çok güzel. Ben bulmak ps_memve smemörneğin ederken, son kullanıcı önlemler için çok faydalı. pmap'nin çok ayrıntılı çıktı devs yönelik olduğunu ... ex için her yazı tipleri, eklentileri, lbs için Firefox Bellek kullanımını almak sağlar. Hepinize teşekkürler exp. @Bash, @thomasruther.
tuk0z

Bu şimdiye kadar çıktı ile eşleşen tek kişignome-system-monitor
ribamar

110

İşlem başına USS ve PSS'yi hesaplayan ps'ye alternatif olan smem kullanın . İstediğiniz muhtemelen PSS'dir.

  • USS - Benzersiz Set Boyutu. Bu işlem için benzersiz olan paylaşılmayan bellek miktarıdır ( benzersiz bellek için bunu U olarak düşünün ). Paylaşılan belleği içermez. Böylece bu irade altında paylaşılan hafızayı görmezden istediğinizde -Raporu bellek miktarı bir süreçtir kullandığı ancak yararlıdır.

  • PSS - Orantılı Set Boyutu. Senin istediğin bu. Paylaşılan belleğinin bir kısmının, o belleği paylaşan işlem sayısına bölünmesiyle birlikte benzersiz belleği (USS) ekler. Böylece, işlem başına gerçek fiziksel belleğin ne kadar kullanıldığının doğru bir temsilini verecektir - paylaşılan bellek gerçekten paylaşılan olarak temsil edilir. P'nin fiziksel bellek için olduğunu düşünün .

Bu, ps ve diğer yardımcı programlar tarafından bildirilen RSS ile nasıl karşılaştırılır :

  • RSS - Yerleşik Set Boyutu. Bu, paylaşılan bellek artı her işlem tarafından kullanılan paylaşılmayan bellek miktarıdır. Herhangi bir işlem belleği paylaşıyorsa, gerçekte kullanılan bellek miktarını fazla bildirir , çünkü aynı paylaşılan bellek bir kereden fazla sayılacaktır - aynı belleği paylaşan diğer işlemlerde yeniden görünecektir. Bu nedenle , özellikle yüksek bellek işlemlerinde çok sayıda çatal olduğunda - ki bu bir sunucuda yaygın olan, Apache veya PHP (fastcgi / FPM) süreçleri ile oldukça güvenilmezdir.

Not: smem ayrıca (isteğe bağlı olarak) pasta grafikler ve benzeri gibi grafikler çıkarabilir. IMO bunlardan hiçbirine ihtiyacınız yok. Eğer komut satırından ps -A v gibi kullanabilirsiniz, o zaman python-matplotlib önerilen bağımlılığını yüklemenize gerek yoktur.


2
RSS ile ilgili kritik noktalardan biri, günümüzde birçok uygulamanın çok sayıda kod sayfası paylaşmasıdır. Paylaşılan her kitaplık (örn. Libc ve libstdc ++), onu kullanan her işlem için sayılır. Ve çalışan bir işlemin birden fazla örneği varsa, bu kodun tamamı çift sayılacaktır.
David

1
Tam olarak, bu yüzden RSS, işlem başına gerçek fiziksel bellek açısından fazla rapor verir.
thomasrutter

3
smem ihtiyacım olan şey. Her yeni bir işlem vakası başlattığımda -t ile çalıştırarak her bir vakanın tükettiği belleği görebiliyorum. Chrome için: smem -t -P '/ opt / google / chrome'
xtian

Ben smem için belge bulmakta zorlanıyorum .. varsayılan olarak bayt, kilobayt veya megabayt çıktı ??
ZN13

4
TL; DR: USS = İşlem öldürülürse serbest bırakılacak fiziksel bellek miktarı, PSS = Mevcut işlem öldürülmezse bu işlemin sistemden ihtiyaç duyduğu fiziksel bellek miktarı, RSS = Tarafından erişilebilen fiziksel bellek miktarı bu işlem (ancak her zaman münhasır olmayan erişim).
Mikko Rantalainen

95
ps -eo size,pid,user,command --sort -size | \
    awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' |\
    cut -d "" -f2 | cut -d "-" -f1

Bunu kök olarak kullanın ve her işlem tarafından bellek kullanımı için net bir çıktı elde edebilirsiniz.

ÇIKTI ÖRNEĞİ:

     0.00 Mb COMMAND 
  1288.57 Mb /usr/lib/firefox
   821.68 Mb /usr/lib/chromium/chromium 
   762.82 Mb /usr/lib/chromium/chromium 
   588.36 Mb /usr/sbin/mysqld 
   547.55 Mb /usr/lib/chromium/chromium 
   523.92 Mb /usr/lib/tracker/tracker
   476.59 Mb /usr/lib/chromium/chromium 
   446.41 Mb /usr/bin/gnome
   421.62 Mb /usr/sbin/libvirtd 
   405.11 Mb /usr/lib/chromium/chromium 
   302.60 Mb /usr/lib/chromium/chromium 
   291.46 Mb /usr/lib/chromium/chromium 
   284.56 Mb /usr/lib/chromium/chromium 
   238.93 Mb /usr/lib/tracker/tracker
   223.21 Mb /usr/lib/chromium/chromium 
   197.99 Mb /usr/lib/chromium/chromium 
   194.07 Mb conky 
   191.92 Mb /usr/lib/chromium/chromium 
   190.72 Mb /usr/bin/mongod 
   169.06 Mb /usr/lib/chromium/chromium 
   155.11 Mb /usr/bin/gnome
   136.02 Mb /usr/lib/chromium/chromium 
   125.98 Mb /usr/lib/chromium/chromium 
   103.98 Mb /usr/lib/chromium/chromium 
    93.22 Mb /usr/lib/tracker/tracker
    89.21 Mb /usr/lib/gnome
    80.61 Mb /usr/bin/gnome
    77.73 Mb /usr/lib/evolution/evolution
    76.09 Mb /usr/lib/evolution/evolution
    72.21 Mb /usr/lib/gnome
    69.40 Mb /usr/lib/evolution/evolution
    68.84 Mb nautilus
    68.08 Mb zeitgeist
    60.97 Mb /usr/lib/tracker/tracker
    59.65 Mb /usr/lib/evolution/evolution
    57.68 Mb apt
    55.23 Mb /usr/lib/gnome
    53.61 Mb /usr/lib/evolution/evolution
    53.07 Mb /usr/lib/gnome
    52.83 Mb /usr/lib/gnome
    51.02 Mb /usr/lib/udisks2/udisksd 
    50.77 Mb /usr/lib/evolution/evolution
    50.53 Mb /usr/lib/gnome
    50.45 Mb /usr/lib/gvfs/gvfs
    50.36 Mb /usr/lib/packagekit/packagekitd 
    50.14 Mb /usr/lib/gvfs/gvfs
    48.95 Mb /usr/bin/Xwayland :1024 
    46.21 Mb /usr/bin/gnome
    42.43 Mb /usr/bin/zeitgeist
    42.29 Mb /usr/lib/gnome
    41.97 Mb /usr/lib/gnome
    41.64 Mb /usr/lib/gvfs/gvfsd
    41.63 Mb /usr/lib/gvfs/gvfsd
    41.55 Mb /usr/lib/gvfs/gvfsd
    41.48 Mb /usr/lib/gvfs/gvfsd
    39.87 Mb /usr/bin/python /usr/bin/chrome
    37.45 Mb /usr/lib/xorg/Xorg vt2 
    36.62 Mb /usr/sbin/NetworkManager 
    35.63 Mb /usr/lib/caribou/caribou 
    34.79 Mb /usr/lib/tracker/tracker
    33.88 Mb /usr/sbin/ModemManager 
    33.77 Mb /usr/lib/gnome
    33.61 Mb /usr/lib/upower/upowerd 
    33.53 Mb /usr/sbin/gdm3 
    33.37 Mb /usr/lib/gvfs/gvfsd
    33.36 Mb /usr/lib/gvfs/gvfs
    33.23 Mb /usr/lib/gvfs/gvfs
    33.15 Mb /usr/lib/at
    33.15 Mb /usr/lib/at
    30.03 Mb /usr/lib/colord/colord 
    29.62 Mb /usr/lib/apt/methods/https 
    28.06 Mb /usr/lib/zeitgeist/zeitgeist
    27.29 Mb /usr/lib/policykit
    25.55 Mb /usr/lib/gvfs/gvfs
    25.55 Mb /usr/lib/gvfs/gvfs
    25.23 Mb /usr/lib/accountsservice/accounts
    25.18 Mb /usr/lib/gvfs/gvfsd 
    25.15 Mb /usr/lib/gvfs/gvfs
    25.15 Mb /usr/lib/gvfs/gvfs
    25.12 Mb /usr/lib/gvfs/gvfs
    25.10 Mb /usr/lib/gnome
    25.10 Mb /usr/lib/gnome
    25.07 Mb /usr/lib/gvfs/gvfsd 
    24.99 Mb /usr/lib/gvfs/gvfs
    23.26 Mb /usr/lib/chromium/chromium 
    22.09 Mb /usr/bin/pulseaudio 
    19.01 Mb /usr/bin/pulseaudio 
    18.62 Mb (sd
    18.46 Mb (sd
    18.30 Mb /sbin/init 
    18.17 Mb /usr/sbin/rsyslogd 
    17.50 Mb gdm
    17.42 Mb gdm
    17.09 Mb /usr/lib/dconf/dconf
    17.09 Mb /usr/lib/at
    17.06 Mb /usr/lib/gvfs/gvfsd
    16.98 Mb /usr/lib/at
    16.91 Mb /usr/lib/gdm3/gdm
    16.86 Mb /usr/lib/gvfs/gvfsd
    16.86 Mb /usr/lib/gdm3/gdm
    16.85 Mb /usr/lib/dconf/dconf
    16.85 Mb /usr/lib/dconf/dconf
    16.73 Mb /usr/lib/rtkit/rtkit
    16.69 Mb /lib/systemd/systemd
    13.13 Mb /usr/lib/chromium/chromium 
    13.13 Mb /usr/lib/chromium/chromium 
    10.92 Mb anydesk 
     8.54 Mb /sbin/lvmetad 
     7.43 Mb /usr/sbin/apache2 
     6.82 Mb /usr/sbin/apache2 
     6.77 Mb /usr/sbin/apache2 
     6.73 Mb /usr/sbin/apache2 
     6.66 Mb /usr/sbin/apache2 
     6.64 Mb /usr/sbin/apache2 
     6.63 Mb /usr/sbin/apache2 
     6.62 Mb /usr/sbin/apache2 
     6.51 Mb /usr/sbin/apache2 
     6.25 Mb /usr/sbin/apache2 
     6.22 Mb /usr/sbin/apache2 
     3.92 Mb bash 
     3.14 Mb bash 
     2.97 Mb bash 
     2.95 Mb bash 
     2.93 Mb bash 
     2.91 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.86 Mb bash 
     2.84 Mb bash 
     2.84 Mb bash 
     2.45 Mb /lib/systemd/systemd
     2.30 Mb (sd
     2.28 Mb /usr/bin/dbus
     1.84 Mb /usr/bin/dbus
     1.46 Mb ps 
     1.21 Mb openvpn hackthebox.ovpn 
     1.16 Mb /sbin/dhclient 
     1.16 Mb /sbin/dhclient 
     1.09 Mb /lib/systemd/systemd 
     0.98 Mb /sbin/mount.ntfs /dev/sda3 /media/n0bit4/Data 
     0.97 Mb /lib/systemd/systemd 
     0.96 Mb /lib/systemd/systemd 
     0.89 Mb /usr/sbin/smartd 
     0.77 Mb /usr/bin/dbus
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.76 Mb su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.75 Mb sudo su 
     0.74 Mb /usr/bin/dbus
     0.71 Mb /usr/lib/apt/methods/http 
     0.68 Mb /bin/bash /usr/bin/mysqld_safe 
     0.68 Mb /sbin/wpa_supplicant 
     0.66 Mb /usr/bin/dbus
     0.61 Mb /lib/systemd/systemd
     0.54 Mb /usr/bin/dbus
     0.46 Mb /usr/sbin/cron 
     0.45 Mb /usr/sbin/irqbalance 
     0.43 Mb logger 
     0.41 Mb awk { hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" } 
     0.40 Mb /usr/bin/ssh
     0.34 Mb /usr/lib/chromium/chrome
     0.32 Mb cut 
     0.32 Mb cut 
     0.00 Mb [kthreadd] 
     0.00 Mb [ksoftirqd/0] 
     0.00 Mb [kworker/0:0H] 
     0.00 Mb [rcu_sched] 
     0.00 Mb [rcu_bh] 
     0.00 Mb [migration/0] 
     0.00 Mb [lru
     0.00 Mb [watchdog/0] 
     0.00 Mb [cpuhp/0] 
     0.00 Mb [cpuhp/1] 
     0.00 Mb [watchdog/1] 
     0.00 Mb [migration/1] 
     0.00 Mb [ksoftirqd/1] 
     0.00 Mb [kworker/1:0H] 
     0.00 Mb [cpuhp/2] 
     0.00 Mb [watchdog/2] 
     0.00 Mb [migration/2] 
     0.00 Mb [ksoftirqd/2] 
     0.00 Mb [kworker/2:0H] 
     0.00 Mb [cpuhp/3] 
     0.00 Mb [watchdog/3] 
     0.00 Mb [migration/3] 
     0.00 Mb [ksoftirqd/3] 
     0.00 Mb [kworker/3:0H] 
     0.00 Mb [kdevtmpfs] 
     0.00 Mb [netns] 
     0.00 Mb [khungtaskd] 
     0.00 Mb [oom_reaper] 
     0.00 Mb [writeback] 
     0.00 Mb [kcompactd0] 
     0.00 Mb [ksmd] 
     0.00 Mb [khugepaged] 
     0.00 Mb [crypto] 
     0.00 Mb [kintegrityd] 
     0.00 Mb [bioset] 
     0.00 Mb [kblockd] 
     0.00 Mb [devfreq_wq] 
     0.00 Mb [watchdogd] 
     0.00 Mb [kswapd0] 
     0.00 Mb [vmstat] 
     0.00 Mb [kthrotld] 
     0.00 Mb [ipv6_addrconf] 
     0.00 Mb [acpi_thermal_pm] 
     0.00 Mb [ata_sff] 
     0.00 Mb [scsi_eh_0] 
     0.00 Mb [scsi_tmf_0] 
     0.00 Mb [scsi_eh_1] 
     0.00 Mb [scsi_tmf_1] 
     0.00 Mb [scsi_eh_2] 
     0.00 Mb [scsi_tmf_2] 
     0.00 Mb [scsi_eh_3] 
     0.00 Mb [scsi_tmf_3] 
     0.00 Mb [scsi_eh_4] 
     0.00 Mb [scsi_tmf_4] 
     0.00 Mb [scsi_eh_5] 
     0.00 Mb [scsi_tmf_5] 
     0.00 Mb [bioset] 
     0.00 Mb [kworker/1:1H] 
     0.00 Mb [kworker/3:1H] 
     0.00 Mb [kworker/0:1H] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [kdmflush] 
     0.00 Mb [bioset] 
     0.00 Mb [jbd2/sda5
     0.00 Mb [ext4
     0.00 Mb [kworker/2:1H] 
     0.00 Mb [kauditd] 
     0.00 Mb [bioset] 
     0.00 Mb [drbd
     0.00 Mb [irq/27
     0.00 Mb [i915/signal:0] 
     0.00 Mb [i915/signal:1] 
     0.00 Mb [i915/signal:2] 
     0.00 Mb [ttm_swap] 
     0.00 Mb [cfg80211] 
     0.00 Mb [kworker/u17:0] 
     0.00 Mb [hci0] 
     0.00 Mb [hci0] 
     0.00 Mb [kworker/u17:1] 
     0.00 Mb [iprt
     0.00 Mb [iprt
     0.00 Mb [kworker/1:0] 
     0.00 Mb [kworker/3:0] 
     0.00 Mb [kworker/0:0] 
     0.00 Mb [kworker/2:0] 
     0.00 Mb [kworker/u16:0] 
     0.00 Mb [kworker/u16:2] 
     0.00 Mb [kworker/3:2] 
     0.00 Mb [kworker/2:1] 
     0.00 Mb [kworker/1:2] 
     0.00 Mb [kworker/0:2] 
     0.00 Mb [kworker/2:2] 
     0.00 Mb [kworker/0:1] 
     0.00 Mb [scsi_eh_6] 
     0.00 Mb [scsi_tmf_6] 
     0.00 Mb [usb
     0.00 Mb [bioset] 
     0.00 Mb [kworker/3:1] 
     0.00 Mb [kworker/u16:1] 

1
Listeyi yalnızca 30 saniye boyunca bellekte% 25'ten fazlasını kullanan işlemlere sahip olacak şekilde filtrelemenin herhangi bir yolu var mı? Bir PHPEclipse hata ayıklayıcı kullanırken Chrome tarayıcı gibi süreçleri kaçmaya çalışıyorum.
Stephane

bu filtre harika olurdu
aleix

1
Bunu olabildiğince çabuk yayınlayacağım.
Lokendra Singh Rawat

2
Harika! Ancak döngü, x=2pid ve kullanıcı çıktısından da başlamalıdır .
Boris Brodski

70

Ne olmuş time?

Değil Bash yerleşik timeama birlikte bulabilen bir which timeörneğin,/usr/bin/time

Basit bir şekilde aşağıdakileri kapsar ls:

$ /usr/bin/time --verbose ls
(...)
Command being timed: "ls"
User time (seconds): 0.00
System time (seconds): 0.00
Percent of CPU this job got: 0%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.00
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 2372
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 121
Voluntary context switches: 2
Involuntary context switches: 9
Swaps: 0
File system inputs: 256
File system outputs: 0
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0

Bende. Ben :) powercron.eu profil görevlere kullanmak yolu
Moonchild

5
brew install gnu-timeDaha sonra kullanmak gtimeEğer MacOS üzerinde ise.
Nobu

4
Dezavantajı: Süreç işlemi tamamlayana kadar sonuçları almayacak. Çalışan işlemin gerçek zamanlı izlenmesi için kullanılamaz.
Makesh

/ usr / bin / time -f '% M'
infomanyak

1
Ayrıca \ time (kabuğun dahili saatinin kullanılmasını önlemek için ters eğik çizgi ile) kullanarak da çağırabilirsiniz.
Raúl Salinas-Monteagudo

39

Bu, araçların ve sorunların mükemmel bir özetidir: archive.org link

Alıntı yapacağım, böylece daha fazla geliştirici gerçekten okuyacak.

Tüm sistemin bellek kullanımını analiz etmek veya bir uygulamanın bellek kullanımını (yalnızca yığın kullanımını değil) ayrıntılı olarak analiz etmek istiyorsanız , exmap kullanın . Tüm sistem analizi için, en yüksek etkili kullanıma sahip süreçleri bulun, pratikte en fazla belleği alırlar, en yüksek yazılabilir kullanıma sahip süreçleri bulurlar, en fazla veri oluştururlar (ve bu nedenle veri kullanımında sızıntı yaparlar veya çok etkisizdirler). Böyle bir uygulamayı seçin ve ikinci liste görünümünde eşlemelerini analiz edin. Daha fazla ayrıntı için exmap bölümüne bakın. Xrestop'u , özellikle X sunucusunun işlemi çok fazla bellek alıyorsa, X kaynaklarının yüksek kullanımını kontrol etmek için kullanın . Ayrıntılar için xrestop bölümüne bakın.

Sızıntıları tespit etmek istiyorsanız, valgrind veya muhtemelen kmtrace kullanın .

Bir uygulamanın yığın (malloc vb.) Kullanımını analiz etmek istiyorsanız, uygulamayı memprof veya kmtrace ile çalıştırın , uygulamayı profille ve en büyük ayırmalar için işlev çağrısı ağacında arama yapın. Daha fazla ayrıntı için bölümlerine bakın.


29

Yanıtlarınızda listelenen çözümlerin yanı sıra, "top" Linux komutunu kullanabilirsiniz; Çalışan sistemin dinamik gerçek zamanlı bir görünümünü sağlar, tüm sistem için yüzde ve her program için CPU ve Bellek kullanımını yüzde olarak verir:

top

bir program pidine göre filtrelemek için:

top -p <PID>

bir program adına göre filtrelemek için:

top | grep <PROCESS NAME>

"top" ayrıca aşağıdaki alanları da sağlar:

VIRT - Sanal Resim (kb): Görev tarafından kullanılan toplam sanal bellek miktarı

RES - Yerleşik boyut (kb): Bir görevin kullandığı değiştirilmemiş fiziksel bellek; RES = KOD + VERİ.

VERİ - Veri + Yığın boyutu (kb): 'Veri yerleşik kümesi' boyutu veya DRS olarak da bilinen yürütülebilir kod dışında ayrılmış fiziksel bellek miktarı.

SHR - Paylaşılan Bellek boyutu (kb): Bir görev tarafından kullanılan paylaşılan bellek miktarı. Diğer işlemlerle potansiyel olarak paylaşılabilecek belleği yansıtır.

Burada referans .


20

Bunun tek bir cevabı yoktur çünkü bir sürecin kullandığı bellek miktarını tam olarak saptayamazsınız. Linux altındaki işlemlerin çoğu paylaşılan kütüphaneler kullanır. Örneğin, 'ls' işlemi için bellek kullanımını hesaplamak istediğinizi varsayalım. Yalnızca çalıştırılabilir 'ls' tarafından kullanılan belleği mi sayıyorsunuz (eğer izole edebiliyorsanız)? Libc ne dersin? Yoksa 'ls' çalıştırmak için gerekli olan tüm diğer libs?

linux-gate.so.1 =>  (0x00ccb000)
librt.so.1 => /lib/librt.so.1 (0x06bc7000)
libacl.so.1 => /lib/libacl.so.1 (0x00230000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00162000)
libc.so.6 => /lib/libc.so.6 (0x00b40000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00cb4000)
/lib/ld-linux.so.2 (0x00b1d000)
libattr.so.1 => /lib/libattr.so.1 (0x00229000)
libdl.so.2 => /lib/libdl.so.2 (0x00cae000)
libsepol.so.1 => /lib/libsepol.so.1 (0x0011a000)

Diğer işlemler tarafından paylaşıldığını iddia edebilirsiniz, ancak 'ls' yüklenmeden sistem üzerinde çalıştırılamaz.

Ayrıca, kapasite planlaması yapmak için bir sürecin ne kadar belleğe ihtiyaç duyduğunu bilmeniz gerekiyorsa, sürecin her bir ek kopyasının ne kadarını hesapladığını hesaplamanız gerekir. / Proc / PID / durumunun, bellek kullanımıyla ilgili tek seferde yeterli bilgi verebileceğini düşünüyorum. Öte yandan, valgrind size programın ömrü boyunca bellek kullanımının daha iyi bir profilini verecektir.


Ben bir süreç bir VM üzerinde ne kadar bellek alıyor bulmaya çalışıyorum ve bu kubernetes bellek sınırını ayarlamak için kullanmak istiyorum, ben bu cevap kabul, bu yüzden gösterilen bellek kullanarak olacaktırpmap
Deepak Deore

16

Kodunuz C veya C ++ getrusage()ise, işleminizin bellek ve zaman kullanımı hakkında size çeşitli istatistikler döndüren kullanabilirsiniz .

Ancak tüm platformlar bunu desteklemez ve bellek kullanım seçenekleri için 0 değer döndürür.

Bunun yerine, içinde oluşturulan sanal dosyaya bakabilirsiniz /proc/[pid]/statm( [pid]işlem kimliğinizin yerini alır. Bunu adresinden alabilirsiniz getpid()).

Bu dosya 7 tamsayı içeren bir metin dosyası gibi görünecektir. Muhtemelen bu dosyadaki ilk (tüm bellek kullanımı) ve altıncı (veri belleği kullanımı) sayılarıyla ilgileniyorsunuz.


Bunun tüm platformlarda desteklenmediğini unutmayın.
CashCow

Linux kılavuz sayfasına ( linux.die.net/man/2/getrusage ) göre getrusage, SVr4, 4.3BSD ve POSIX.1-2001 teknik özelliklerinin bir parçasıdır (POSIX'in yalnızca kullanım ve sabit alanları belirttiğine dikkat edin.) I UNIX dışı platformlarda çalışmasını beklemez (belki de Cygwin gibi diğer platformlar için UNIX yetenekleri sağlayan bir ortam dışında.)
David C.

@DavidC. OP Linux'u soruyor.
Alexis Wilke

@CashCow, demek istediniz getpid(), çünkü getprocessid()Linux altında C / C ++ 'da bir işlev bilmiyorum .
Alexis Wilke

12

Valgrind ayrıntılı bilgi gösterebilir, ancak hedef uygulamayı önemli ölçüde yavaşlatır ve çoğu zaman uygulamanın davranışını değiştirir.
Exmap henüz bilmediğim bir şeydi, ama bilgiyi almak için bir engel modülüne ihtiyacınız olan bir çekirdek modülüne ihtiyacınız var gibi görünüyor .

Herkesin WRT "bellek kullanımı" nı bilmek istediğini düşünüyorum ...
Linux'ta, tek bir işlemin kullanabileceği fiziksel bellek miktarı kabaca aşağıdaki kategorilere ayrılabilir.

  • Ma anonim eşlenen bellek

    • .p özel
      • .d dirty == malloc / mmapped yığın ve yığın ayrılmış ve yazılı belleği
      • .c clean == malloc / mmapped yığın ve yığın bellek ayrıldıktan, yazıldıktan, serbest bırakıldıktan sonra henüz geri kazanılmadı
    • .s paylaştı
      • .d dirty == malloc / mmaped öbek yazma üzerine kopyalanabilir ve işlemler arasında paylaşılabilir (düzenlenmiş)
      • .c clean == malloc / mmaped öbek yazma üzerine kopyalanabilir ve işlemler arasında paylaşılabilir (düzenlenmiş)
  • Mn adlı eşlenen bellek

    • .p özel
      • .d dirty == dosya mmapped yazılı bellek özel
      • .c clean == eşlenmiş program / kütüphane metni özel eşlendi
    • .s paylaştı
      • .d dirty == dosya mmapped yazılı bellek paylaşıldı
      • .c clean == eşlenmiş kütüphane metni eşlendi

Android'de showmap adı verilen yardımcı program oldukça kullanışlı

virtual                    shared   shared   private  private
size     RSS      PSS      clean    dirty    clean    dirty    object
-------- -------- -------- -------- -------- -------- -------- ------------------------------
       4        0        0        0        0        0        0 0:00 0                  [vsyscall]
       4        4        0        4        0        0        0                         [vdso]
      88       28       28        0        0        4       24                         [stack]
      12       12       12        0        0        0       12 7909                    /lib/ld-2.11.1.so
      12        4        4        0        0        0        4 89529                   /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
      28        0        0        0        0        0        0 86661                   /usr/lib/gconv/gconv-modules.cache
       4        0        0        0        0        0        0 87660                   /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
       4        0        0        0        0        0        0 89528                   /usr/lib/locale/en_US.utf8/LC_TELEPHONE
       4        0        0        0        0        0        0 89527                   /usr/lib/locale/en_US.utf8/LC_ADDRESS
       4        0        0        0        0        0        0 87717                   /usr/lib/locale/en_US.utf8/LC_NAME
       4        0        0        0        0        0        0 87873                   /usr/lib/locale/en_US.utf8/LC_PAPER
       4        0        0        0        0        0        0 13879                   /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
       4        0        0        0        0        0        0 89526                   /usr/lib/locale/en_US.utf8/LC_MONETARY
       4        0        0        0        0        0        0 89525                   /usr/lib/locale/en_US.utf8/LC_TIME
       4        0        0        0        0        0        0 11378                   /usr/lib/locale/en_US.utf8/LC_NUMERIC
    1156        8        8        0        0        4        4 11372                   /usr/lib/locale/en_US.utf8/LC_COLLATE
     252        0        0        0        0        0        0 11321                   /usr/lib/locale/en_US.utf8/LC_CTYPE
     128       52        1       52        0        0        0 7909                    /lib/ld-2.11.1.so
    2316       32       11       24        0        0        8 7986                    /lib/libncurses.so.5.7
    2064        8        4        4        0        0        4 7947                    /lib/libdl-2.11.1.so
    3596      472       46      440        0        4       28 7933                    /lib/libc-2.11.1.so
    2084        4        0        4        0        0        0 7995                    /lib/libnss_compat-2.11.1.so
    2152        4        0        4        0        0        0 7993                    /lib/libnsl-2.11.1.so
    2092        0        0        0        0        0        0 8009                    /lib/libnss_nis-2.11.1.so
    2100        0        0        0        0        0        0 7999                    /lib/libnss_files-2.11.1.so
    3752     2736     2736        0        0      864     1872                         [heap]
      24       24       24        0        0        0       24 [anon]
     916      616      131      584        0        0       32                         /bin/bash
-------- -------- -------- -------- -------- -------- -------- ------------------------------
   22816     4004     3005     1116        0      876     2012 TOTAL

10

Denemek için üç yöntem daha:

  1. ps aux --sort pmem
    Çıkışı sıralar %MEM.
  2. ps aux | awk '{print $2, $4, $11}' | sort -k2r | head -n 15
    Boruları kullanarak sıralar.
  3. top -a
    Üst sıralamaya göre başlar %MEM

( Buradan çıkarılır )


2
topve muhtemelen diğerleri, işlem tarafından kullanılan belleğin doğru bir temsilini vermez. Örneğin, 64GiB RAM'im var ve postgresher biri 16GiB RES ve% 25 MEM bildiren 10 işlemim var. Tabii ki, hepsi% 25 kullanamıyor ... Her birinin 15GiB SHR'si var ve bunu paylaşıyorlar gibi görünüyor.
sudo

8
#!/bin/ksh
#
# Returns total memory used by process $1 in kb.
#
# See /proc/NNNN/smaps if you want to do something
# more interesting.
#

IFS=$'\n'

for line in $(</proc/$1/smaps)
do
   [[ $line =~ ^Size:\s+(\S+) ]] && ((kb += ${.sh.match[1]}))
done

print $kb

5
ksh standart bir kabuktur. Masaüstü kullanıcıları için veya minimalist amaçlar için linux dağıtımlarına varsayılan olarak yüklenmeyebilir , ancak neredeyse tüm unix- / linux işletim sistemlerinde yalnızca bir komut uzaklıktadır. (yani tüm BSD'lerde, tüm gerçek UNIX'lerde, RHEL'de, SLES'te, Debian'da, Ubuntu'da, OSX'te)
Florian Heigl

Bu dosyaya varsayılan olarak yalnızca kök kullanıcı tarafından erişilebilir.
Dmitry Ginzburg

Aşağıdaki sadece sed | awkBusybox v1.23.2 içine yeniden yazılmış ve çalışıyor: sed -n 's/^Size:\s\+\(\S\+\) .*/\1/p' /proc/$1/smaps | awk '{s+=$1} END {print s}'
Ján Sáreník

1
@Catskul - POSIX standardı, standart kabuğunu, Bourne kabuğunun geliştirilmiş bir versiyonu olan Korn kabuğunun katı bir alt kümesi olarak belirtir.
ceph3us

8

Kullanıyorum htop; Windows Görev Yöneticisi'ne benzer çok iyi bir konsol programıdır.


Kullandım htopve üstten daha iyi ama yine de farklı uygulamalardan gelen tüm konuları, onları en üstte işe yaramaz hale getirmeden gruplandırmadan gösterecek.
sorin

1
$ htop -p $ (pgrep <işlem adınız> | xargs | tr '' ',')
AAAfarmclub

7

Arch Linux kullanıyorum ve şu harika paket var: ps_mem

ps_mem -p <pid>

Örnek Çıktı

$ ps_mem -S -p $(pgrep firefox)

Private   +   Shared  =  RAM used   Swap used   Program

355.0 MiB +  38.7 MiB = 393.7 MiB    35.9 MiB   firefox
---------------------------------------------
                        393.7 MiB    35.9 MiB
=============================================

6

İşlem çok fazla bellek kullanmıyorsa (bunun böyle olmasını beklediğiniz için veya başka bir komut bu ilk gösterimi verdiğinden) ve işlem kısa bir süre için durdurulmaya dayanabilirse, gcore komutunu kullanın.

gcore <pid>

Belirli bir işlemin ne kadar bellek kullandığına dair iyi bir fikir edinmek için oluşturulan çekirdek dosyanın boyutunu kontrol edin.

Süreç yüzlerce meg veya konser kullanıyorsa bu çok iyi sonuç vermez, çünkü çekirdek üretimin G / Ç performansına bağlı olarak oluşturulması birkaç saniye veya dakika sürebilir. Çekirdek oluşturma sırasında, bellek değişikliklerini önlemek için işlem durdurulur (veya "dondurulur"). Yani dikkatli ol.

Ayrıca çekirdeğin oluşturulduğu bağlama noktasında çok fazla disk alanı olduğundan ve sistemin söz konusu dizinde oluşturulan çekirdek dosyaya olumsuz tepki vermeyeceğinden emin olun.


5

Aşağıdaki komut satırı, Linux makinesinde MB olarak çalışan çeşitli işlemlerin kullandığı toplam belleği verecektir.

ps -eo size,pid,user,command --sort -size | awk '{ hr=$1/1024 ; printf("%13.2f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | awk '{total=total + $1} END {print total}'

5

Daha "gerçek dünya" kullanımının iyi bir testi, uygulamayı açmak ve daha sonra vmstat -s"aktif bellek" istatistiğini çalıştırmak ve kontrol etmektir. Uygulamayı kapatın, birkaç saniye bekleyin ve vmstat -stekrar çalıştırın . Ancak çok aktif bellek boşaltıldı uygulama tarafından kullanımda olduğu açıkça.


3
Nasıl ps daha iyi olurdu? PS'nin tüm sınırlamasıyla birlikte gelir ve daha da yanlıştır ...
Lester Cheung

Tipik bir Unix sistemi her zaman başlatma ve bitirme işlemlerine sahiptir. Ücretsiz RAM'inizi tahmin edemezsiniz.
Raúl Salinas-Monteagudo

4

Valgrind alın. çalıştırmak için programınızı verin ve size bellek kullanımı hakkında bolca bilgi verecektir.

Bu, yalnızca bir süre çalışan ve duran bir program için geçerlidir. Valgrind'in halihazırda çalışan bir süreç üzerinde olup olmadığını veya cinler gibi süreçleri durdurup durdurmayacağını bilmiyorum.


Hayır, valgrind'i çalışan bir işleme "eklemek" mümkün değildir. Bu tasarım gereğidir.
Dima Tisnek

3

Düzenleme: Bu sadece bellek tüketimi arttığında% 100 iyi çalışır

Bellek kullanımını belirli bir işlemle (veya işlenmiş paylaşım ortak adıyla, örneğin google-chromebash komut dosyamı kullanarak izlemek istiyorsanız :

while true; do ps aux | awk ‚{print $5, $11}’ | grep chrome | sort -n > /tmp/a.txt; sleep 1; diff /tmp/{b,a}.txt; mv /tmp/{a,b}.txt; done;

bu sürekli olarak değişiklikleri arayacak ve yazdıracaktır.

resim açıklamasını buraya girin


3

Valgrind ile profillemekten daha hızlı bir şey istiyorsanız ve çekirdeğiniz daha eskiyse ve smaps kullanamıyorsanız, işlemin yerleşik kümesini (ile ps -o rss,command) gösterme seçeneklerine sahip bir ps size _aproximation_gerçek miktarın hızlı ve makul bir miktarını verebilir değiştirilmemiş bellek kullanılıyor.


3

Yukarıda kullanmanızı öneririm. Bununla ilgili her şeyi bu sayfada bulabilirsiniz . İşlemleriniz için gerekli tüm KPI'ları sağlayabilir ve bir dosyaya da yakalayabilir.


2
PSIZE ["bu işlemin (veya kullanıcının) oransal bellek boyutunu) atop -Rgöstermek için kullanarak başlatabilirsiniz . Kullanıcı başına özet push göstermek için p, bellek kullanımına göre sıralamak için 'M' üstüne basın.
Markus Strauss


1

İçin başka bir oy burada, ancak valgrind tarafından üretilen sonuçları yorumlamanıza yardımcı olmak için Alleyoop gibi bir araç kullanabileceğinizi eklemek isterim.

İki aracı her zaman kullanıyorum ve gururla göstermek için her zaman yalın, sızıntısız kod var;)


1

Bu soru şu anda çalışan süreçleri incelemekle ilgili gibi görünse de, bir uygulama tarafından baştan sona kullanılan en yüksek belleği görmek istedim. Valgrind'in yanı sıra , çok daha basit olan tstime kullanabilirsiniz . "Yüksek su" bellek kullanımını ölçer (RSS ve sanal). Gönderen bu cevap .


Çoğu uygulama - yani malloc () ve malloc benzeri bellek kitaplıkları kullananlar - proess sonlandırılıncaya kadar sayfaları OS'ye döndürmez. Yani PS ile gördüğünüz miktar (veya işlemin yığınına girmeyen başka bir araç) yüksek su işareti olacaktır.
David

0

İlgili bir sorunun cevabına dayanarak .

Ağdaki belirli bir cihazdaki bir işlemin belleğini ve işlemci kullanımını almak için SNMP'yi kullanabilirsiniz :)

Gereksinimler:

  • işlemi çalıştıran cihazda snmp kurulu ve çalışıyor olmalıdır
  • snmp, aşağıdaki komut dosyasını çalıştıracağınız istekleri kabul edecek şekilde yapılandırılmalıdır (snmpd.conf içinde yapılandırılmış olabilir)
  • izlemek istediğiniz işlemin işlem kimliğini (pid) bilmelisiniz

Notlar:

  • HOST KAYNAKLARI-MIB :: hrSWRunPerfCPU , toplam işlemin bu işlem tarafından tüketilen CPU kaynaklarının santimetre saniye sayısıdır. Çok işlemcili bir sistemde, bu değerin gerçek (duvar saati) süresinin bir santimetre saniyesinde bir saniyeden fazla artabileceğini unutmayın.

  • HOST KAYNAKLARI-MIB :: hrSWRunPerfMem , bu işleme ayrılan gerçek sistem belleği toplamıdır.

**

Süreç izleme komut dosyası:

**

echo "IP: "
read ip
echo "specfiy pid: "
read pid
echo "interval in seconds:"
read interval

while [ 1 ]
do
    date
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfCPU.$pid
    snmpget -v2c -c public $ip HOST-RESOURCES-MIB::hrSWRunPerfMem.$pid
    sleep $interval;
done

0

/ prox / xxx / numa_maps orada bazı bilgiler verir: N0 = ??? N1 = ???. Ancak bu sonuç, yalnızca dokunulmuş olanları saydığı için gerçek sonuçtan daha düşük olabilir.


-1

Ubuntu'da bulunan yerleşik ' sistem monitörü ' GUI aracını kullanın


1
En azından 16.04'ten beri çok iyi çalışıyor. Yine de üst kısım gibi, kullanılan bellek son derece hassas değil ...
Alexis Wilke
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.