Quelle quantité de RAM cette application utilise-t-elle?

10

Si j'exécute top -cou htopj'obtiens des processus avec leur consommation de mémoire, mais ce n'est pas ce que je veux voir.

Existe-t-il une ligne de commande qui permet de voir la consommation de RAM d'une application donnée?

Par exemple, je veux voir la consommation de RAM du serveur Web Apache (pas en vérifiant plutôt tous les processus qu'il exécute)


la source
Merci. Le meilleur que je puisse y trouver est une consommation de mémoire par processus, ce que top -c me donne déjà

Réponses:

4

Il y a une très bonne explication détaillée ici: https://blogs.kde.org/2005/09/15/measuring-memory-usage

Mais essentiellement: vous devez vraiment creuser et comprendre comment l'application est configurée.

Ainsi, par exemple, en regardant 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 mémoire totale utilisée est d'environ 25 Mo (prenez le RES de 27 Mo et soustrayez le partagé (SHR))

J'ai validé cela en vérifiant l'utilisation totale de la mémoire (free -m, + / buffers / cache) avant et après l'émission d'un "killall mysqld". Après avoir tué tous les processus mysqld, l'utilisation de la mémoire a chuté de 25 Mo selon "free -m".

Si vous voyez que chaque processus a des colonnes VIRT, RES et SHR identiques, il s'agit probablement de threads du même processus. (Les anciennes bibliothèques Linux géraient le filetage en générant plusieurs processus réels qui occupaient essentiellement la même mémoire)

S'ils sont différents, vous pourrez peut-être l'estimer en faisant une SOMME de (RES - SHR). Mais cela ne fonctionne que si les processus sont en fait des processus séparés et pas seulement des threads du même processus. La recherche du PPID (Parent Process ID) aide également. S'ils ont tous le même parent, ce ne sont probablement que des fils (bien que pas nécessairement).

Malheureusement, il n'y a pas vraiment de bon moyen de répondre à cela sous Linux. Le seul moyen simple consiste à cocher «gratuit» immédiatement avant de terminer le processus et à le vérifier à nouveau immédiatement après. regardez la ligne "- / + buffers / cache:" et voyez combien l'utilisation de la mémoire a diminué et cela vous dira combien elle utilisait.

irwinr
la source
2

Avec un peu d'aide de man pset cette excellente réponse ...

ps -up $(pidof PROCESS_NAME)

Par exemple:

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

D'autres moyens:

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

Cela peut être exécuté sans -xet tail -1:

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

affiche uniquement le pourcentage:

top -p $(pidof firefox)

De plus, pendant l'utilisation, topvous pouvez appuyer sur ipour ignorer les processus inactifs / zombies afin de faciliter la lecture: sortie supérieure beaucoup plus petite

Wilf
la source
mais une application lance plusieurs processus, comment savoir lequel est le principal?
devine? je pense pmapmontre beaucoup de choses sur les ressources que le PID utilise. Les informations sont fournies en fonction du nom du processus et du PID trouvé à l'aide de celui-ci pidof, donc le processus principal est indiqué si le nom que vous fournissez (je pense, je ne sais pas s'il fait référence aux processus parents)
Wilf
2
Cela sépare la sortie par processus. Vous n'obtiendrez pas la quantité totale de mémoire utilisée par tous les processus Apache de cette façon. Vous devez résumer, mais en comptant les régions partagées une seule fois (c'est la partie difficile).
Gilles 'SO- arrête d'être méchant'