Comment utiliser la mémoire (RAM utilisée) en utilisant la commande Linux?

30

J'essaie de récupérer la mémoire utilisée (RAM) en pourcentage à l'aide des commandes Linux. Mon cpanel affiche la mémoire utilisée que je dois afficher sur une page Web particulière.

Sur les forums, j'ai découvert qu'une mémoire correcte peut être trouvée à partir des éléments suivants:

free -m

Résultat:

-/+ buffers/cache:        492       1555

- / + buffers / cache: contient l'utilisation correcte de la mémoire. Je ne sais pas comment analyser ces informations ou s'il existe une commande différente pour obtenir la mémoire utilisée en pourcentage.

codelogn
la source
3
Cela a déjà été répondu ici! stackoverflow.com/questions/10585978/… ex: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher
@szboardstretcher J'aime celui-ci:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me
Sans savoir ce dont vous avez besoin, il est difficile de vous dire quel numéro vous devez utiliser. Cependant, dans de nombreux cas, l'un de ces chiffres est très naïf et nécessite des informations sur les tendances et le contexte.
eckes

Réponses:

33

Voici un exemple de sortie de free:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

La première ligne de nombres ( Mem:) répertorie

  • total Mémoire
  • used Mémoire
  • free Mémoire
  • l'utilisation de shared
  • l'utilisation de buffers
  • utiliser les caches du système de fichiers ( cached)

Dans cette ligne used comprend les tampons et le cache et cela a un impact gratuit. Ce n'est pas votre "vraie" mémoire libre car le système va vider le cache si nécessaire pour satisfaire les demandes d'allocation.

La ligne suivante ( -/+ buffers/cache:) nous donne la mémoire réellement utilisée et libre comme s'il n'y avait pas de tampons ou de cache.

La dernière ligne ( Swap) indique l'utilisation de la mémoire d'échange. Il n'y a pas de tampon ou de cache pour le swap car cela n'aurait aucun sens de mettre ces choses sur un disque physique.

Pour sortir la mémoire utilisée (tampons moins et cache), vous pouvez utiliser une commande comme:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Cela saisit la troisième ligne et divise utilisé / total * 100.

Et pour une mémoire libre:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657
casey
la source
1
"- / + buffers / cache: 5779440 18904464" est-il correct de l'utilisation / de l'état de la RAM du serveur?
codelogn
2
Strictement parlant, non, mais pratiquement, oui. L'utilisation réelle de la mémoire est la deuxième ligne (utilisée: 20746840), mais une partie de cette utilisation de la mémoire est constituée de tampons et de cache qui sont juste pour accélérer les temps de réponse sur votre système. La troisième ligne (utilisée: 5779440) vous donne la quantité de mémoire réellement utilisée par les programmes et c'est ce chiffre de mémoire qui détermine combien plus vos programmes peuvent allouer. Si votre objectif est d'obtenir de la mémoire libre / utilisée dans le sens des programmes réellement utilisés et de ce que vous pouvez réellement allouer, alors oui, la ligne 3 est correcte pour vous.
casey
1
Notez qu'avec les versions plus récentes de free, -/+ buffers/cacheest complètement omis intentionnellement, et la valeur indiquée dans la usedcolonne exclut désormais les tampons et le cache par défaut. Voir ici: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson
10

Je vais mentionner comment analyser les informations sur la freecommande. Pour trouver le pourcentage, vous pouvez utiliser comme suggéré dans les 2 autres réponses.

Ceci est clairement expliqué ici . J'essaierais d'expliquer ce que j'ai dans mon système.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Voyons maintenant ce que les différents nombres représentent réellement.

Ligne 1

  • 7869 Indique la mémoire / RAM physique disponible pour ma machine.
  • 4402 Indique la mémoire / RAM utilisée par mon système.
  • 3466 Indique la RAM totale libre et disponible pour l'exécution d'un nouveau processus.
  • 0 Indique la mémoire partagée. Cette colonne est obsolète et pourrait être supprimée dans les futures versions de free.
  • 208 Indique la RAM totale mise en mémoire tampon par différentes applications sous Linux.
  • 3497 Indique la RAM totale utilisée pour la mise en cache des données à des fins futures.

Ligne 2

-/+ buffers/cache:        696       7173

Comment calculer les valeurs 696 et 7173 obtenues en ligne 2?

Total utilisé ( 4402 ) - RAM totale du tampon ( 208 ) - La RAM totale pour la mise en cache ( 3497 ) devrait constituer la RAM réelle utilisée dans le système. Il me renvoie 697 qui est la sortie RAM réellement utilisée dans la deuxième ligne.

Maintenant, le total disponible ( 7869 ) - réel utilisé ( 696 ) devrait vous donner la mémoire libre qui est 7173 dans ce cas qui est également obtenue en sortie sur la deuxième ligne.

Ramesh
la source
6

Bien qu'il s'agisse d'un doublon tel que souligné par @szboardstretcher, ma préférence parmi les solutions (dans la question d'origine) est celle ci-dessous, d'autant plus que vous souhaitez analyser une page Web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Sortie:

used: 82.68%, buffers: 42.81%, swap: 1.27%
Simplement moi
la source
4
Pour info, j'obtiens ce qui suit en utilisant ceciused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj
Quelle est la commande complète utilisée? Je l'ai vérifié en centimes.
Simply_Me
Désolé pour le formatage mais c'est $ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
parti
Pour certaines versions de awk (mawk), le signe de pourcentage doit être doublé pour l'imprimer, sinon awk génère une erreur, comme ceci: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Cela fonctionne avec mawk et gawk.
Ján Lalinský
2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Ajoute une nouvelle ligne après le numéro d'échange

Andy
la source
1

Pour jusqu'à CentOS 7, vous pouvez essayer

cat /proc/meminfo 

pour voir l'utilisation réelle de la mémoire par les processus.

Cosmo Arun
la source