Quanta RAM utilizza questa applicazione?


10

Se corro top -co htopottengo processi con il loro consumo di memoria, ma non è quello che voglio vedere.

Esiste una riga di comando che consente di vedere il consumo di RAM di una determinata applicazione?

Ad esempio, voglio vedere il consumo di RAM del server Web Apache (non controllando invece tutti i processi che esegue)

ram 


Grazie. Il meglio che posso trovare in esso è un consumo di memoria per processo, cosa che mi dà già top -c

Risposte:


4

C'è una spiegazione dettagliata molto buona qui: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Ma essenzialmente: devi davvero scavare e capire come è configurata l'applicazione.

Quindi, ad esempio, guardando 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    

La memoria totale utilizzata è di circa 25 MB (prendere i 27 MB di RES e sottrarre il condiviso (SHR))

L'ho convalidato controllando l'utilizzo totale della memoria (free -m, + / buffers / cache) prima e dopo aver emesso un "killall mysqld". Dopo aver ucciso tutti i processi mysqld, l'utilizzo della memoria è diminuito di 25 MB secondo "free -m".

Se vedi che ogni processo ha colonne VIRT, RES e SHR identiche, probabilmente sono solo thread dello stesso processo. (Le librerie Linux precedenti gestivano il thread generando più processi reali che essenzialmente occupavano la stessa memoria)

Se sono diversi, potresti essere in grado di stimarlo facendo una SOMMA di (RES - SHR). Ma questo funziona solo se i processi sono in realtà processi separati e non solo thread dello stesso processo. Anche l'esame del PPID (Parent Process ID) aiuta. Se hanno tutti lo stesso genitore, probabilmente sono solo dei thread (sebbene non necessariamente).

Sfortunatamente non esiste un buon modo semplice per rispondere a ciò in Linux. L'unico modo semplice è controllare "gratis" immediatamente prima di terminare il processo e ricontrollarlo immediatamente dopo. guarda la riga "- / + buffers / cache:" e vedi quanto uso della memoria è diminuito e che ti dirà quanto stava usando.


2

Con un po 'di aiuto da man pse questa grande risposta ...

ps -up $(pidof PROCESS_NAME)

Per esempio:

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

Altri modi:

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

Questo può essere eseguito senza -xe tail -1:

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

mostra solo la percentuale:

top -p $(pidof firefox)

Inoltre, durante l'utilizzo topè possibile premere iper ignorare i processi inattivi / zombi per facilitare la lettura: uscita superiore molto più piccola


ma un'applicazione avvia diversi processi, come posso sapere qual è il principale?

indovina? penso che pmapmostri molte cose sulle risorse che il PID sta usando. Le informazioni sono fornite in base al nome del processo e al PID trovato da esso utilizzando pidof, quindi il processo principale mostrato se qualunque nome tu fornisci (penso, non so se si riferisce ai processi parent)
Wilf

2
Ciò separa l'output per processo. Non otterrai la quantità totale di memoria utilizzata da tutti i processi Apache in questo modo. Devi riassumere, ma contando le regioni condivise solo una volta (questo è il bit difficile).
Gilles 'SO- smetti di essere malvagio'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.