Bu uygulama ne kadar RAM kullanıyor?


10

Çalıştırırsam top -cveya htopbellek tüketimi ile süreçler alırsam, ama görmek istediğim şey bu değil.

Belirli bir uygulamanın RAM tüketimini görmenizi sağlayan bir komut satırı var mı?

Örneğin, Apache web sunucusunun RAM tüketimini görmek istiyorum (bunun yerine çalıştığı tüm işlemleri kontrol ederek değil)

ram 


Teşekkürler. İçinde bulabildiğim en iyi şey, top

Yanıtlar:


4

Burada çok iyi bir ayrıntılı açıklama var: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Ama aslında: Uygulamanın nasıl kurulduğunu gerçekten araştırıp anlamanız gerekiyor.

Yani, örneğin, mysql bakarak:

  PID  PPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                    
 6004 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:40.33 mysqld                                                                                                                                            
16115 16085 composit  20   0 37900  27m 2908 S    0  0.2   0:00.37 mysqld                                                                                                                                            
16116 16115 composit  20   0 37900  27m 2908 S    0  0.2   2:07.34 mysqld                                                                                                                                            
16117 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld                                                                                                                                            
16118 16116 composit  20   0 37900  27m 2908 S    0  0.2   3:19.79 mysqld                                                                                                                                            
16119 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.01 mysqld                                                                                                                                            
16120 16116 composit  20   0 37900  27m 2908 S    0  0.2   5:31.09 mysqld                                                                                                                                            
16121 16116 composit  20   0 37900  27m 2908 S    0  0.2  14:19.53 mysqld                                                                                                                                            
16122 16116 composit  20   0 37900  27m 2908 S    0  0.2  36:13.67 mysqld                                                                                                                                            
16123 16116 composit  20   0 37900  27m 2908 S    0  0.2  30:30.64 mysqld                                                                                                                                            
16124 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.15 mysqld                                                                                                                                            
16493 16116 composit  20   0 37900  27m 2908 S    0  0.2   0:00.00 mysqld    

Kullanılan toplam bellek yaklaşık 25 MB'dir (27 MB RES'i alın ve paylaşılan (SHR) çıkarın)

Bir "killall mysqld" yayınlamadan önce ve sonra toplam bellek kullanımını (free -m, + / buffers / cache) kontrol ederek bunu doğruladım. Tüm mysqld işlemlerini öldürdükten sonra "free -m" ye göre bellek kullanımı 25 MB düştü.

Her işlemin aynı VIRT, RES ve SHR sütunlarına sahip olduğunu görürseniz, bunlar muhtemelen aynı işlemin iş parçacıklarıdır. (Eski Linux kütüphaneleri, aslında aynı hafızayı işgal eden birden fazla gerçek süreç oluşturarak iş parçacığını işledi)

Eğer farklılarsa, (RES - SHR) toplamını kullanarak bunu tahmin edebilirsiniz. Ancak bu sadece süreçler aslında aynı sürecin konuları değil, ayrı süreçler ise işe yarar. PPID'ye (Ebeveyn İşlem Kimliği) bakmak da yardımcı olur. Eğer hepsinin aynı ebeveyni varsa, muhtemelen sadece ipliklerdir (Her ne kadar zorunlu olmasa da).

Ne yazık ki Linux'ta buna cevap vermenin iyi ve kolay bir yolu yok. Tek kolay yol, işlemi sonlandırmadan hemen önce "ücretsiz" kontrol etmek ve hemen sonra tekrar kontrol etmektir. "- / + buffers / cache:" satırına bakın ve bellek kullanımının ne kadar azaldığını görün ve bu size ne kadar kullandığını gösterir.


2

Biraz yardım man psve bu harika cevap ile ...

ps -up $(pidof PROCESS_NAME)

Örneğin:

[wilf@comp ~]$ ps -up $(pidof firefox)
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
wilf      1619  8.9  5.6 1464216 342396 ?      Sl   17:56   1:36 /usr/lib64/firefox/firefox
[wilf@comp ~]$ 

Diğer yollar:

cat /proc/$(pidof firefox)/status | grep VmSize

Bu -xve olmadan çalıştırılabilir tail -1:

pmap -x $(pidof firefox) | tail -1

sadece yüzdeyi gösterir:

top -p $(pidof firefox)

Ayrıca, kullanırken , okumayı kolaylaştırmak için boşta / zombi işlemlerini yok saymak topiçin tuşuna basabilirsiniz i: çok daha küçük üst çıkış


ancak bir uygulama birkaç işlemi başlatır, hangisinin ana olduğunu nasıl bilebilirim?

tahmin? Bence pmapPID kullandığı kaynaklar hakkında bir sürü şey gösterir. Bilgiler, işlemin adı ve kullanarak kullanılan PID'ye dayalı olarak sağlanır pidof, bu nedenle ana işlem, sağladığınız adın ne olduğunu gösterir (bence, ana işlemlere geri dönüp
dönmediğini

2
Bu, çıktıyı işleme göre ayırır. Tüm Apache işlemleri tarafından kullanılan toplam bellek miktarını bu şekilde alamazsınız. Özetlemek gerekir, ancak paylaşılan bölgeleri sadece bir kez saymak (bu zor bir bit).
Gilles 'SO- kötü olmayı bırak'
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.