Berapa banyak RAM yang digunakan aplikasi ini?

10

Jika saya menjalankan top -catau htopsaya mendapatkan proses dengan konsumsi memori mereka, tetapi bukan itu yang ingin saya lihat.

Apakah ada baris perintah yang memungkinkan untuk melihat konsumsi RAM dari aplikasi yang diberikan?

Sebagai contoh, saya ingin melihat konsumsi RAM server web Apache (bukan dengan memeriksa semua proses yang dijalankannya)


sumber
Terima kasih. Yang terbaik yang dapat saya temukan di dalamnya adalah konsumsi memori dengan proses, yang mana hal -c atas sudah memberi saya

Jawaban:

4

Ada penjelasan rinci yang sangat bagus di sini: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Tetapi pada dasarnya: Anda harus benar-benar menggali dan memahami bagaimana aplikasi diatur.

Jadi misalnya, melihat mysql:

  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    

Total memori yang digunakan adalah sekitar 25 MB (Ambil RES 27 MB dan kurangi shared (SHR))

Saya memvalidasi ini dengan memeriksa total penggunaan memori (free -m, + / buffer / cache) sebelum dan setelah mengeluarkan "killall mysqld". Setelah membunuh semua proses mysqld, penggunaan memori turun 25 MB menurut "free -m".

Jika Anda melihat bahwa setiap proses memiliki kolom VIRT, RES, dan SHR yang identik, mereka mungkin hanya ulir dari proses yang sama. (Pustaka Linux lama menangani threading dengan menelurkan beberapa proses nyata yang pada dasarnya menempati memori yang sama)

Jika mereka berbeda, Anda mungkin dapat memperkirakannya dengan melakukan SUM (RES - SHR). Tetapi itu hanya bekerja jika proses-proses tersebut pada kenyataannya merupakan proses yang terpisah dan bukan hanya benang dari proses yang sama. Melihat PPID (Induk Proses ID) juga membantu. Jika mereka semua memiliki orang tua yang sama, mereka mungkin hanya utas (Meskipun tidak harus).

Sayangnya tidak ada cara mudah yang sangat baik untuk menjawab ini di Linux. Satu-satunya cara mudah adalah memeriksa "bebas" segera sebelum menghentikan proses dan memeriksanya kembali segera setelah itu. lihat baris "- / + buffer / cache:" dan lihat seberapa banyak penggunaan memori menurun dan itu akan memberi tahu Anda berapa banyak yang digunakan.

irwinr
sumber
2

Dengan sedikit bantuan dari man psdan jawaban yang bagus ini ...

ps -up $(pidof PROCESS_NAME)

Sebagai contoh:

[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 ~]$ 

Cara lain:

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

Ini dapat dijalankan tanpa -xdan tail -1:

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

hanya menunjukkan persentase:

top -p $(pidof firefox)

Selain itu, saat menggunakan topAnda dapat menekan iuntuk mengabaikan proses idle / zombie untuk membuatnya lebih mudah dibaca: Output atas jauh lebih kecil

Wilf
sumber
tetapi aplikasi meluncurkan beberapa proses, bagaimana saya bisa tahu yang mana yang utama?
Tebak? Saya pikir pmapmenunjukkan banyak hal tentang sumber daya yang menggunakan PID. Informasi ini diberikan berdasarkan nama proses dan PID yang ditemukan menggunakan itu pidof, jadi proses utama ditampilkan jika nama apa pun yang Anda berikan (saya pikir, tidak tahu apakah itu merujuk kembali ke proses induk)
Wilf
2
Ini memisahkan output dengan proses. Anda tidak akan mendapatkan jumlah total memori yang digunakan oleh semua proses Apache dengan cara ini. Anda perlu meringkas, tetapi menghitung daerah yang dibagikan hanya sekali (ini adalah bagian yang sulit).
Gilles 'SANGAT berhenti menjadi jahat'