Esiste una versione per Mac OS X Terminal del comando "libero" nei sistemi Linux?

181

Su Linux, uso spesso il comando gratuito per vedere l'attuale quantità di memoria gratuita e utilizzata nel sistema. Ad esempio:

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

Non sembra esistere quando inserisco free nel terminale di Mac OS X. C'è un'alternativa?

    
posta hpy 23.11.2010 - 22:08
fonte

21 risposta

88

Come dice @khedron , puoi vedere queste informazioni in Monitoraggio attività.

Se lo vuoi sulla riga di comando, ecco uno script Python che ho scritto (o forse modificato da quello di qualcun altro, non ricordo, è piuttosto vecchio ora) per mostrarti il Wired, Active, Inactive e Free quantità di memoria:

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

Come puoi vedere, puoi chiamare vm_stat dalla riga di comando, sebbene contenga 4kB pagine, quindi lo script da convertire in MB.

Lo script conta anche l'utilizzo della "memoria reale" di tutti i processi in esecuzione per il confronto (questo non corrisponderà a nessun valore specifico dalle statistiche generali della memoria, perché la memoria è una bestia complessa).

Ecco un esempio dell'output dello script sul mio sistema:

[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

(leggermente regolato per abbinare il ridimensionamento delle schede su StackExchange;)

    
risposta data 24.11.2010 - 03:18
fonte
62

Il comando di cui hai bisogno è vm_stat - simile allo strumento Unix tradizionale vmstat ma con alcune differenze specifiche di MACH. La pagina man è ben scritta.

    
risposta data 30.04.2012 - 19:00
fonte
47

Sembra che il motivo sia lento perché top -l 1 ritarda sempre di un secondo dopo il completamento, il ritardo standard tra gli aggiornamenti. L'aggiunta di -s 0 al comando lo rende immediatamente istantaneo:

top -l 1 -s 0 | grep PhysMem

Inoltre, per chiarezza, mi piace mostrare ogni componente mem sulla sua linea, quindi ho aggiunto 9 spazi per l'allineamento con 'PhysMem:' nella stringa di sostituzione sed:

top -l 1 -s 0 | grep PhysMem | sed 's/, /\n         /g'
    
risposta data 29.03.2012 - 19:48
fonte
35

Ecco una semplice copertina per rendere l'intero vm_stat più amichevole:

$ 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
    
risposta data 18.06.2013 - 10:31
fonte
23

Nel caso in cui tu sia interessato solo all'utilizzo dello swap (quale sarebbe l'ultima riga di output da free ):

$ sysctl vm.swapusage
vm.swapusage: total = 64.00M  used = 0.00M  free = 64.00M  (encrypted)
    
risposta data 13.11.2013 - 18:33
fonte
20

Esiste un comando terminale simile a free su Mac OS X ... è chiamato top

Per ulteriori informazioni puoi consultare questo documento di supporto Apple.

Mac OS X: come visualizzare l'utilizzo della memoria con l'utilità "top"

    
risposta data 28.07.2011 - 19:43
fonte
10

Basta prendere la soluzione da @zack e aggiungere blocchi inattivi e speculativi.

#!/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
    
risposta data 10.04.2012 - 14:24
fonte
10
#!/bin/bash
top -l 1 | grep PhysMem: | awk '{print $10}'

Solo per esperti Unix:

top -l 1 | awk '/PhysMem:/ {print $10}'
    
risposta data 17.02.2012 - 12:18
fonte
8
free="$(( $(vm_stat | awk '/free/ {gsub(/\./, "", $3); print $3}') * 4096 / 1048576)) MiB free"
    
risposta data 28.07.2011 - 18:45
fonte
7

A giudicare dal tuo altra domanda , penso che tu abbia trovato l'uso dell'utilità Monitor attività per controllare lo stato della memoria, giusto? Per la cronaca, è in / Applicazioni / Utility / Monitoraggio attività.app.

    
risposta data 23.11.2010 - 23:43
fonte
7

Potresti provare il comando allmemory se vuoi uno strumento da riga di comando che riporta un utilizzo della memoria estremamente dettagliato.

    
risposta data 23.07.2011 - 01:50
fonte
5

Non esiste un equivalente esatto distribuito con Mac OS X, ma ci sono un paio di altri modi per ottenere le informazioni:

  1. system_profiler - Mostra tutte le informazioni del profilo di sistema del Mac nella shell
  2. sysctl -a | grep mem o sysctl hw.memsize (totale mem)
risposta data 04.12.2013 - 01:13
fonte
4

Quanto sopra è troppo impegnativo per i miei gusti, e presuppone che tu abbia un'installazione completa anche ... Se hai avviato da un disco di avvio Mac OS X, allora tutte le soluzioni di cui sopra ovviamente hanno vinto ' t lavorare ... Basta usare il comando "hostinfo", ecco l'output della mia metà del 2012 MBAir che esegue 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

Il bello di questo comando è che viene preinstallato con l'installer 10.9 anche in /usr/bin , quindi è molto utile,

idealmente, se vuoi solo la RAM, emetti:

$ hostinfo | grep memory

Non so se l'hostinfo esiste su qualsiasi sistema operativo precedente sebbene ...

    
risposta data 28.01.2014 - 01:18
fonte
4
top -l 1 -s 0 | awk ' /Processes/ || /PhysMem/ || /Load Avg/{print}'

Questo dovrebbe andare bene:)

    
risposta data 27.10.2015 - 06:33
fonte
3

Puoi provare il comando memory_pressure . Vedi l'output del mio sistema (i5, 4 GB di 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%
    
risposta data 20.05.2016 - 01:20
fonte
2

Comandi di Bash "gratuiti come" per Mac OSX.

Questa è la seconda ristampa di questo post. All'inizio, ho ottenuto due% di-1. Uno perché non stavo descrivendo in inglese, è corretto. L'altro perché ho usato gawk (che non fa parte di un'installazione OS X standard), è anche corretto, ora utilizzo awk . Il -2 è ancora lì ;-). Il meglio è forse ora per testare e valutare i comandi da soli?

Ho esaminato la mia prima idea di creare un solo comando orientato all'utente finale con un display amichevole e altamente configurabile, ne ho fatti due:

  • free-like.sh uno script sempre orientato "utente finale", con maggiore precisione, una visualizzazione "amichevole" e configurabile, ma con più calcoli e consumo di risorse,

  • free-like-raw.sh , uno sviluppatore orientato al comando, sysadmin, ecc., con meno calcolo e consumo di risorse, ma anche con meno precisione, meno visualizzazione "amichevole".

I dati per la memoria fisica vengono estratti dai risultati del comando vm_stat (che restituisce i risultati in blocchi). L'imprecisione risultante dalla trasformazione in byte (number_of_blocks * block_size, il valore predefinito dei calcoli) sarà compresa tra 0 e lt; la dimensione del blocco. I dati per la memoria virtuale sono presi dal comando top . L'imprecisione qui è collegata all'unità di riferimento del comando top : kilo, mega, giga.

I calcoli vengono effettuati utilizzando awk che rispetta arrotondato (al contrario di bc ). awk è anche più veloce di bc . Puoi vedere lo script di test qui: link

Puoi visualizzare i risultati dei comandi in byte (predefinito), in kilo, mega o giga, con x posizioni decimali nel caso di free-like.sh e se chiedi al display in mega ou giga.

Gli script sono troppo lunghi per un post, ma puoi trovarli su questo articolo del mio blog: link

L'articolo è in francese, ma mostra un esempio di visualizzazione per ciascun comando e il relativo aiuto integrato ( ./free-like.sh -h e ./free-like-raw.sh -h ), in inglese. Questi aiuti descrivono completamente i comandi. L'articolo mostra anche i codici.

L'inglese non è la mia lingua madre. Se qualcuno vuole correggere gli errori nell'aiuto integrato, è benvenuto;).

la tua.

    
risposta data 11.05.2013 - 22:54
fonte
2

Funziona al mio $ PS1:

link

(versione di Ruby: link )

    
risposta data 27.01.2012 - 20:23
fonte
2

Penso che questi giorni, psutil e i suoi meminfo.py fornisce i più utili dettagli sull'utilizzo della memoria. Per provarlo:

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

L'output che produce è simile a questo:

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

Nota la riga Available , che mostra una stima di la quantità di memoria effettivamente disponibile per l'avvio di nuove applicazioni , senza scambio.

Non conosco nessun'altra utility MacOS che fornisca la stima della memoria disponibile.

Per il confronto: su un sistema Linux, lo stesso tipo di informazione è fornito nella colonna available nell'output dalle versioni correnti di 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

Quella colonna available nell'output free viene appena da MemAvailable in /proc/meminfo . E su sistemi che hanno /proc/meminfo , psutil usa anche quello per stimare la memoria disponibile.

Ma MacOS non ha /proc/meminfo , quindi per stimare la memoria disponibile in quel caso, psutil impiega lo stesso algoritmo usato su Linux per calcolare MemAvailable per /proc/meminfo .

    
risposta data 01.02.2017 - 14:41
fonte
1

vm_stat ti mostra in kilobyte.

L'oneliner qui sotto mostra 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

Returns:

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
    
risposta data 21.11.2015 - 20:41
fonte
1

Se si usa fishshell su osx, insieme a fisher il suo gestore di pacchetti.

Ho scritto la seguente estensione: link

È una ripetizione completa del comando gratuito per osx. Guarda da solo

> 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
    
risposta data 22.12.2016 - 23:41
fonte
-1

top o htop può anche aiutare a risolvere il problema.

    
risposta data 22.09.2016 - 04:42
fonte

Leggi altre domande sui tag