Gibt es auf Linux-Systemen eine Mac OS X Terminal-Version des Befehls "free"?


194

Unter Linux verwende ich häufig den Befehl free , um die aktuelle Menge an freiem und verwendetem Speicher im System anzuzeigen. Zum Beispiel:

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

Es scheint nicht zu existieren, wenn ich das freeMac OS X-Terminal betrete. Gibt es eine alternative

Antworten:


92

Wie @khedron sagt , können Sie diese Informationen im Aktivitätsmonitor anzeigen .

Wenn Sie möchten, dass es in der Befehlszeile angezeigt wird, finden Sie hier ein Python-Skript, das ich geschrieben habe (oder das möglicherweise von jemand anderem geändert wurde, ich kann mich nicht erinnern, dass es jetzt ziemlich alt ist), um Ihnen die Speichermengen Wired, Active, Inactive und Free anzuzeigen:

#!/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 ))

Wie Sie sehen, können Sie einfach vm_statvon der Kommandozeile aus aufrufen , obwohl es sich um 4kB-Seiten handelt, daher das Skript, das in MB konvertiert werden soll.

Das Skript zählt auch die "reale Speicherauslastung" aller ausgeführten Prozesse zum Vergleich auf (dies entspricht keinem bestimmten Wert aus der gesamten Speicherstatistik, da der Speicher ein komplexes Biest ist).


Hier ist ein Beispiel für die Ausgabe des Skripts auf meinem System:

[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

(sehr leicht angepasst, um der Größe der Registerkarte in StackExchange zu entsprechen;)


Was ist der beste Weg, um dieses Skript zu verwenden?
iddober

2
Sie wissen nicht genau, was Sie meinen ... Kopieren Sie es und fügen Sie es in eine neue Datei ein, speichern Sie es irgendwo (vielleicht in / usr / local / bin), machen Sie es ausführbar und führen Sie es aus?
Drfrogsplat

Ich denke, @idober hat vorgeschlagen, dass Sie ein Beispiel für die Ausführung und die erzeugte Ausgabe (z. B. eine Bildschirmaufnahme) einschließen
AJ.

@ Aj, ah ok, habe es
drfrogsplat

6
Nur meine 2 Cent:ps -caxm -orss= | awk '{ sum += $1 } END { print "Resident Set Size: " sum/1024 " MiB" }'
Tresor

70

Der Befehl, den Sie benötigen, ist vm_stat- ähnlich dem traditionellen Unix-Tool, vmstataber mit ein paar MACH-spezifischen Unterschieden. Die Manpage ist gut geschrieben.


2
Was sind "Seiten"?
DilithiumMatrix

8
@zhermes - Die kleinste vom System verwendbare Speichereinheit ... bei x86- und PPC-Macs sind dies 4 KB. Freie Seiten sind die Anzahl der 4 KB freien Speichereinheiten.
RI Swamp Yankee

2
Seiten sind auch 4K in iOS.
SMCI

54

Es scheint, dass der Grund dafür, dass es langsam ist, darin besteht, dass es top -l 1nach dem Abschluss immer um eine Sekunde verzögert wird, die Standardverzögerung zwischen den Aktualisierungen. Durch Hinzufügen von -s 0 zum Befehl wird der Vorgang sofort abgeschlossen:

top -l 1 -s 0 | grep PhysMem

Außerdem zeige ich aus Gründen der Übersichtlichkeit gerne jede Mem-Komponente in ihrer Zeile an. Deshalb habe ich 9 Leerzeichen für die Ausrichtung mit 'PhysMem:' in der sed-Ersetzungszeichenfolge hinzugefügt:

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

1
Es ist hund langsam, es ist viel besser zu nutzen vm_stat.
mgol

3
Ja, das Abfragen topist erheblich langsamer als das Aufrufen, vm_stataber der topAuszug ist viel weniger ausführlich und die Einheit ist Megabyte und keine Seite. Um noch weniger wortreich zu sein, können die Zeilenumbrüche entfernt und awkdurch das grepErgebnis ersetzt werden top -l 1 | grep ^PhysMem.
Stefan Schmidt

2
Alles in allem ist dies die beste Antwort. Gibt keine Ergebnisse in nicht hilfreichen pageEinheiten / erfordert eine Art hacky Nachbearbeitung, um diese Einheiten interpretierbar zu machen.
ijoseph

39

Hier ist ein einfacher Einzeiler, um die gesamte vm_statAusgabe menschlicher zu gestalten:

$ 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

25

Für den Fall, dass Sie nur wirklich an der Verwendung von Swap interessiert sind (was wäre die letzte Ausgabezeile von free):

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

Ich suchte es Danke viel :)
Onalbi

20

Es gibt einen Terminalbefehl, der freeMac OS X ähnelt ... er heißttop

Weitere Informationen finden Sie in diesem Apple Support-Dokument.

Mac OS X: Anzeigen der Speichernutzung mit dem Dienstprogramm "top"


24
Genau genommen ist "top" unter OS X dem Linux-Befehl "top" natürlich ähnlicher :)
calum_b

6
besser als oben:htop
nXqd

3
@ nXqd htop: Befehl nicht gefunden
itsazzad

4
@ SazzadTusharKhan brauen installieren htop, wenn Sie brauen installiert haben
nXqd

2
Technisch gesehen sind sie sich überhaupt nicht ähnlich, da das kostenlose Drucken eine ansprechende und ordentliche Befehlszeile darstellt, während das obere Element aktiv angezeigt wird.
anon58192932

10

Nehmen Sie einfach die Lösung von @zack und fügen Sie inaktive und spekulative Blöcke hinzu.

#!/bin/bash

FREE_BLOCKS=$(vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//')
INACTIVE_BLOCKS=$(vm_stat | grep inactive | awk '{ print $3 }' | sed 's/\.//')
SPECULATIVE_BLOCKS=$(vm_stat | grep speculative | awk '{ print $3 }' | sed 's/\.//')

FREE=$((($FREE_BLOCKS+SPECULATIVE_BLOCKS)*4096/1048576))
INACTIVE=$(($INACTIVE_BLOCKS*4096/1048576))
TOTAL=$((($FREE+$INACTIVE)))
echo Free:       $FREE MB
echo Inactive:   $INACTIVE MB
echo Total free: $TOTAL MB

9
#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'

Nur für Unix-Experten:

top -l 1 | awk '/PhysMem:/ {print $10}'

1
Dies führt in modernen macOS nicht mehr zu Ergebnissen.
Matt Sephton

Verwenden Sie top -l1 | awk '/PhysMem/ {print $2}'auf MacOS> = High Sierra
JDS

Gibt keinen benutzten Speicher zurück
theillien

8
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"

1
Die aktuelle Ausgabe dieses Befehls funktioniert in tcsh(meine Standardeinstellung) oder nicht sh. Ist der Befehl Shell-spezifisch?
Graham Perrin

Ja, es ist bashund kshspezifisch. In tcshVersuch: set freeblocks=`vm_stat | grep free | awk '{ print $3 }' | sed 's/\.//'` ; set freeMB=`expr $freeblocks \* 4096 / 1048576`; set free=`echo $freeMB MiB free`. Sie können dann echo $freedie Menge des freien Speichers ausdrucken. Sie können auch einen Alias erstellen: alias free echo $freeMB MiB free.
Jaume

7

Ihrer anderen Frage nach zu urteilen , haben Sie das Activity Monitor-Dienstprogramm verwendet, um Ihren Speicherstatus zu überprüfen, oder? Nur zur Veranschaulichung, es befindet sich in / Applications / Utilities / Activity Monitor.app.


7

Es gibt keine genaue Entsprechung, die mit Mac OS X vertrieben wird, aber es gibt ein paar andere Möglichkeiten, um die Informationen abzurufen:

  1. system_profiler - Zeigt alle Systemprofilinformationen des Mac in der Shell an
  2. sysctl -a | grep memoder sysctl hw.memsize(total mem)

+1, arbeitet vom Terminal im Wiederherstellungsmodus (cmd-r beim Booten)
Steve Kehlet

7

Sie können den Befehl ausprobieren, allmemorywenn Sie ein Befehlszeilentool benötigen, das eine äußerst detaillierte Speicherauslastung meldet.


1
Ein leistungsstarkes Tool, aber es ist prozessorintensiv (ungefähr 95% von einer von zwei CPUs auf meinem MacBookPro5,2) und wenn viel Speicher verwendet wird: Ein einfacher Durchlauf von allmemorykann unerwartet lang sein - für mich heute über vier Minuten pro Durchlauf. YMMV. Ein Lauf von allmemoryfor sysdiagnosekann erheblich länger dauern.
Graham Perrin

6

Das oben Genannte ist für mich viel zu aufwendig und setzt voraus, dass Sie auch eine vollwertige Installation haben ... Wenn Sie von einer Mac OS X-Startdiskette gebootet haben, funktionieren alle oben genannten Lösungen offensichtlich nicht. ..Verwende einfach den Befehl "hostinfo", hier ist die Ausgabe von meinem Mid-2012 MBAir mit Mavericks (10.9.1):

 Mach kernel version:
 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64
Kernel configured for up to 4 processors.
2 processors are physically available.
4 processors are logically available.
Processor type: i486 (Intel 80486)
Processors active: 0 1 2 3
Primary memory available: 8.00 gigabytes
Default processor set: 195 tasks, 961 threads, 4 processors
Load average: 1.61, Mach factor: 2.38

Das Gute an diesem Befehl ist, dass er mit dem 10.9-Installationsprogramm vorinstalliert ist. Es ist also /usr/binsehr praktisch.

Wenn Sie nur RAM benötigen, geben Sie im Idealfall Folgendes ein:

$ hostinfo | grep memory

Ich weiß jedoch nicht, ob hostinfo in früheren Betriebssystemen vorhanden ist ...


4
Wie funktioniert hostinfozeigt verwendete Speicher?
Nohillside

3
Dieser Befehl (zumindest hier in OS 10.6.8) zeigt nur den physisch verfügbaren Speicher an, aber nicht, wie viel davon derzeit verwendet wird
MostlyHarmless

Dies bedeutet, dass die gestellte Frage nicht beantwortet wird, da ausdrücklich angegeben wird, dass "freier und verwendeter Speicher" gewünscht wird.
b4hand

5
top -l 1 -s 0 | awk ' /Processes/ || /PhysMem/ || /Load Avg/{print}'

Das sollte gut gehen :)


3

Ich denke, diese Tage psutilund sein meminfo.pySkript bieten die hilfreichsten Details zur Speichernutzung. Es versuchen:

pip install psutil
curl -O https://raw.githubusercontent.com/giampaolo/psutil/master/scripts/meminfo.py
python ./meminfo.py

Die Ausgabe sieht folgendermaßen aus:

MEMORY
------
Total      :   16.0G
Available  :    5.5G
Percent    :    65.8
Used       :   13.5G
Free       :    1.5G
Active     :    7.4G
Inactive   :    4.0G
Wired      :    2.1G

SWAP
----
Total      :    1.0G
Used       :   33.5M
Free       :  990.5M
Percent    :     3.3
Sin        :   15.9G
Sout       :   71.6M

Beachten Sie die AvailableZeile, die eine Schätzung der tatsächlich verfügbaren Speicherkapazität zum Starten neuer Anwendungen ohne Auslagerung enthält.

Ich kenne kein anderes MacOS-Dienstprogramm, das diese Schätzung des verfügbaren Arbeitsspeichers liefert.

Zum Vergleich: Auf einem Linux-System werden in der availableSpalte für die Ausgabe der aktuellen Versionen von free:

              total        used        free      shared  buff/cache   available
Mem:           7.8G        552M        182M        156M        7.1G        6.9G
Swap:            0B          0B          0B
Total:         7.8G        552M        182M

Diese availableSpalte in der freeAusgabe kommt nur von MemAvailableinnen /proc/meminfo. Auf Systemen, auf denen psutil installiert ist /proc/meminfo, schätzt psutil den verfügbaren Arbeitsspeicher.

Aber MacOS nicht über /proc/meminfo, so dass in diesem Fall den verfügbaren Speicher zu schätzen, psutil verwendet den gleichen Algorithmus auf Linux verwendet zur Berechnung MemAvailablefür/proc/meminfo .


3

Sie können den memory_pressureBefehl versuchen . Siehe die Ausgabe meines Systems (i5, 4 GB RAM)

The system has 2147483648 (524288 pages with a page size of 4096).

Stats: 
Pages free: 90009 
Pages purgeable: 139593 
Pages purged: 7496548 

Swap I/O:
Swapins: 470466 
Swapouts: 530913 

Page Q counts:
Pages active: 407739 
Pages inactive: 148277 
Pages speculative: 16200 
Pages throttled: 0 
Pages wired down: 263064 

Compressor Stats:
Pages used by compressor: 122815 
Pages decompressed: 7327420 
Pages compressed: 17625795 

File I/O:
Pageins: 1538997 
Pageouts: 86692 

System-wide memory free percentage: 63%

2

Bash-Befehle "frei wie" für Mac OSX.

Dies ist die zweite Neuauflage dieses Beitrags. Zuerst bekam ich zwei -1. Eine, weil ich nicht auf Englisch beschrieben habe, ist korrigiert. Das andere, weil ich es benutzt habe gawk(was nicht Teil einer Standard-OS X-Installation ist), ist ebenfalls korrigiert, was ich jetzt benutze awk. Die -2sind noch da ;-). Am besten ist es jetzt vielleicht, die Befehle selbst zu testen und auszuwerten?

Ich überprüfte meine erste Idee, nur einen endbenutzerorientierten Befehl mit einer benutzerfreundlichen und hoch konfigurierbaren Anzeige zu erstellen, und machte zwei:

  • free-like.sh ein Skript, das immer auf den Endbenutzer ausgerichtet ist, mit größerer Genauigkeit, einer "benutzerfreundlichen" und konfigurierbaren Anzeige, aber mit mehr Berechnungen und Ressourcenverbrauch,

  • free-like-raw.sh, ein befehlsorientierter Entwickler, Sysadmin, etc .., mit weniger Rechenaufwand und Ressourcenverbrauch, aber auch mit weniger Genauigkeit, weniger "freundlicher" Anzeige.

Die Daten für den physischen Speicher werden aus den Ergebnissen des Befehls extrahiert vm_stat(der die Ergebnisse in Blockgröße zurückgibt). Die Ungenauigkeit, die sich aus der Transformation in Bytes ergibt (Anzahl_der_Blöcke * Blockgröße, der Standardwert der Berechnungen), liegt zwischen 0 <der Größe des Blocks. Die Daten für den virtuellen Speicher werden dem topBefehl entnommen . Die Ungenauigkeit hier ist an die Bezugseinheit des topBefehls gebunden : Kilo, Mega, Giga.

Berechnungen werden mit awkgerundeten (im Gegensatz zu bc) Beträgen durchgeführt . awkist auch schneller als bc. Sie können das Testskript hier sehen: http://myblog.robert.sebille.name/article29.html#awk-bc

Sie können die Ergebnisse der Befehle in Bytes (Standard), in Kilo, Mega oder Giga, mit x Dezimalstellen im Fall von free-like.sh und wenn Sie die Anzeige in Mega oder Giga fragen, anzeigen.

Die Skripte sind zu lang für einen Beitrag, aber Sie finden sie in diesem Artikel meines Blogs: http://myblog.robert.sebille.name/article29.html

Der Artikel ist in französischer Sprache, enthält jedoch ein Anzeigebeispiel für jeden Befehl und die integrierte Hilfe ( ./free-like.sh -hund ./free-like-raw.sh -h) in englischer Sprache. Diese Hilfsmittel beschreiben die Befehle vollständig. Der Artikel zeigt auch die Codes an.

Englisch ist nicht meine Muttersprache. Wenn jemand Fehler in der integrierten Hilfe korrigieren möchte, ist er willkommen;).

deine.


Abgesehen davon, dass es für jemanden ohne Französischkenntnisse mehr oder weniger unbrauchbar ist, scheint es für Ihr Skript erforderlich zu sein, gawkdas nicht Teil einer Standardinstallation von OS X ist.
Nohillside

@patrix: Vielen Dank für Ihr Feedback. Ich werde eine Beschreibung auf Englisch verfassen und die integrierte Hilfe auch übersetzen (derzeit auf Französisch). Gawk: Eigentlich habe ich vergessen, danke. Ich habe mit awk einige Lokalisierungsprobleme (Komma oder Komma) festgestellt. Sie verschwanden, ohne zu wissen warum. Ich kam zurück, anstatt zu gaffen. Ich habe ein bisschen Zeit gebraucht, um die Dinge anzupassen. Ich werde neu posten, wenn es fertig ist. Deine.
Robert

1
Einfach Gawk durch Awk zu ersetzen, funktionierte für mich ohne Probleme.
Nohillside


1

vm_stat Zeigt Sie in Kilobyte an.

Der Oneliner unten zeigt in Megabyte:

paste <(vm_stat | awk 'NR>1' | grep -o ".*:") <(for i in $(vm_stat | awk 'NR>1' | tr -d '.' | awk '{print $NF}'); do perl -e "print $i/1024" | awk '{printf "%0.2f", $0}'; echo; done) | column -s: -t

Kehrt zurück:

Pages free                      11.06
Pages active                    798.25
Pages inactive                  776.03
Pages speculative               9.15
Pages throttled                 0.00
Pages wired down                303.27
Pages purgeable                 0.95
"Translation faults"            82172.66
Pages copy-on-write             11629.60
Pages zero filled               27685.41
Pages reactivated               1450.70
Pages purged                    91.66
File-backed pages               430.20
Anonymous pages                 1153.24
Pages stored in compressor      481.75
Pages occupied by compressor    149.91
Decompressions                  1277.92
Compressions                    1622.33
Pageins                         13198.02
Pageouts                        66.61
Swapins                         54.34
Swapouts                        90.63

1

Wenn Sie fishshell auf osx benutzen, zusammen mit fisher, seinem Paketmanager.

Ich habe die folgende Erweiterung geschrieben: https://github.com/fisherman/free

Es ist eine vollständige Wiederholung des kostenlosen Befehls für osx. Überzeugen Sie sich selbst

> free
                 total     used     free   appmem    wired   compressed
Mem:            8.00Gb   6.65Gb   1.95Gb   2.87Gb   2.09Gb   1.86Gb
+/- Cache:               1.24Gb   1.87Gb
Swap(43%):      2048Mb    877Mb   1171Mb
Load Avg:        1.63 1.95 1.95

Nett. Sofort geklaut.
PeterVP

-1

top oder htop können ebenfalls helfen, das Problem zu lösen.


Willkommen, anders zu fragen. Geben Sie weitere Informationen dazu an, wie die von Ihnen angegebenen Befehle die Frage beantworten.
Tubedogg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.