257 votes

Existe-t-il une version du Terminal Mac OS X de la commande "free" dans les systèmes Linux ?

Sous Linux, j'utilise souvent l'option gratuit pour voir la quantité actuelle de la mémoire libre et utilisée dans le système. Par exemple :

$ free
             total       used       free     shared    buffers     cached
Mem:       7264256    1010952    6253304          0     371892     189088
-/+ buffers/cache:     449972    6814284
Swap:      8126456         28    8126428

Il ne semble pas exister lorsque j'entre free dans le Terminal de Mac OS X. Existe-t-il une alternative ?

113voto

Shuft Points 420

Comme le dit @khedron vous pouvez voir cette information dans le moniteur d'activité.

Si vous voulez le faire en ligne de commande, voici un script Python que j'ai écrit (ou peut-être modifié à partir de celui de quelqu'un d'autre, je ne me souviens plus, il est assez vieux maintenant) pour vous montrer les quantités de mémoire câblée, active, inactive et libre :

#!/usr/bin/python

import subprocess
import re

# Get process info
ps = subprocess.Popen(['ps', '-caxm', '-orss,comm'], stdout=subprocess.PIPE).communicate()[0].decode()
vm = subprocess.Popen(['vm_stat'], stdout=subprocess.PIPE).communicate()[0].decode()

# Iterate processes
processLines = ps.split('\n')
sep = re.compile('[\s]+')
rssTotal = 0 # kB
for row in range(1,len(processLines)):
    rowText = processLines[row].strip()
    rowElements = sep.split(rowText)
    try:
        rss = float(rowElements[0]) * 1024
    except:
        rss = 0 # ignore...
    rssTotal += rss

# Process vm_stat
vmLines = vm.split('\n')
sep = re.compile(':[\s]+')
vmStats = {}
for row in range(1,len(vmLines)-2):
    rowText = vmLines[row].strip()
    rowElements = sep.split(rowText)
    vmStats[(rowElements[0])] = int(rowElements[1].strip('\.')) * 4096

print('Wired Memory:\t\t%d MB' % (vmStats["Pages wired down"]/1024/1024))
print('Active Memory:\t\t%d MB' % (vmStats["Pages active"]/1024/1024))
print('Inactive Memory:\t%d MB' % (vmStats["Pages inactive"]/1024/1024))
print('Free Memory:\t\t%d MB' % (vmStats["Pages free"]/1024/1024))
print('Real Mem Total (ps):\t%.3f MB' % (rssTotal/1024/1024))

Comme vous pouvez le voir, vous pouvez simplement appeler vm_stat depuis la ligne de commande, bien qu'il compte en pages de 4kB, d'où le script pour convertir en MB.

Le script compte également l'utilisation de la "mémoire réelle" de tous les processus en cours d'exécution à des fins de comparaison (cela ne correspondra pas à une ou plusieurs valeurs spécifiques des statistiques globales de la mémoire, car la mémoire est une bête complexe).


Voici un exemple de la sortie du script sur mon système :

[user@host:~] % memReport.py
Wired Memory:           1381 MB
Active Memory:          3053 MB
Inactive Memory:        727 MB
Free Memory:            1619 MB
Real Mem Total (ps):    3402.828 MB

(très légèrement ajusté pour correspondre à la taille des onglets sur StackExchange ;)

11 votes

C'est incroyable que l'on doive écrire un script pour obtenir cette information de base sur un mac.

0 votes

@meyerson, je pense que c'est un peu exagéré, vous n'avez pas ont d'écrire un script ne fait que rassembler un ensemble intéressant d'informations dans un format lisible par l'homme vaguement similaire à la commande 'free' spécifique à linux. La commande 'vm_stat' vous donne déjà les informations de base, tout comme 'top'.

19 votes

Juste mes deux cents : ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'

102voto

RI Swamp Yankee Points 1029

La commande dont vous avez besoin est vm_stat - similaire à l'outil traditionnel d'Unix vmstat mais avec quelques différences spécifiques au MACH. La page de manuel est bien écrite.

5 votes

Que sont les "pages" ?

11 votes

@zhermes - La plus petite unité de mémoire utilisable par le système... dans le cas des Macs x86 et PPC, c'est 4k. Les pages libres sont le nombre d'unités de mémoire de 4k libres.

2 votes

Les pages sont également 4K dans iOS.

80voto

linus Points 681

Il semble que la raison pour laquelle c'est lent est parce que top -l 1 retarde toujours d'une seconde après avoir terminé, le délai standard entre les rafraîchissements. En ajoutant -s 0 à la commande, celle-ci se termine instantanément :

top -l 1 -s 0 | grep PhysMem

De plus, pour plus de clarté, j'aime montrer chaque composant mem sur sa ligne, donc j'ai ajouté 9 espaces pour l'alignement avec 'PhysMem : ' dans la chaîne de remplacement sed :

top -l 1 -s 0 | grep PhysMem | sed 's/, /\n         /g'

1 votes

C'est un chien lent, c'est beaucoup mieux d'utiliser vm_stat .

3 votes

Oui, l'interrogation top est significativement plus lent que l'appel à vm_stat mais le top L'extrait est beaucoup moins verbeux et l'unité est le mégaoctet et non les pages. Pour être encore moins verbeux, les sauts de ligne peuvent être supprimés et l'option awk peut être remplacé par grep ce qui entraîne top -l 1 | grep ^PhysMem .

4 votes

Tout bien considéré, c'est la meilleure réponse. Ne donne pas de résultats dans un contexte peu utile. page unités/ nécessitent une sorte de post-traitement pour rendre ces unités interprétables.

62voto

Pontus Points 730

Voici une simple phrase pour rendre le tout vm_stat sortie plus conviviale :

$ vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576);'
free:                     2330.23 Mi
active:                   2948.07 Mi
inactive:                 1462.97 Mi
speculative:               599.45 Mi
wired down:                840.46 Mi
copy-on-write:           43684.84 Mi
zero filled:            385865.48 Mi
reactivated:               608.14 Mi

31voto

dpq Points 2112

Au cas où vous ne seriez vraiment intéressé que par l'utilisation de l'espace de pagination (quelle serait la dernière ligne de sortie de la commande free ) :

$ sysctl vm.swapusage
vm.swapusage: total = 64.00M  used = 0.00M  free = 64.00M  (encrypted)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X