Quanto swap utilizza una determinata applicazione Mac?


15

Esiste un modo per sapere se una particolare applicazione in esecuzione su Mac OSX (10.2+) ha sostituito parte della sua memoria (ovvero, con uno dei /private/var/vm/swapfile*file)? E quanto costa?

Bounty (150 rps)

Domanda semplice. La prima risposta corretta sarà accettata se la vedo con meno di 2 giorni di scadenza del periodo di ricompensa. Se non ne ho ancora uno, lo assegnerò a chiunque mi dica il nuovo fatto più interessante. E se non ho imparato nulla da nessuna delle risposte, assegnerò la generosità a chiunque scriva in modo più grazioso.


Questa è una brutta domanda. Il numero che stai cercando cambierebbe perché stavi cercando di misurarlo (pensa al principio di incertezza di Heisenberg). Inoltre cambierebbe continuamente a seconda delle altre applicazioni e dei loro requisiti di memoria, schemi di io e priorità di processo. Se trovi che il numero non ti gioverà se non stai modificando il codice OS, perché c'è poco che farai dal punto di vista dell'applicazione per cambiarlo.
Gavaletz,

3
@gavaletz: uscire dal letto sbagliato stamattina? Voglio il tipo di profilazione di swap che Linux rende possibile usando / proc / $ pid / smaps. Di solito riesco a identificare improvvise esplosioni di attività di scambio usando le mie orecchie, quindi non sono troppo infastidito dal principio di incertezza di Gavaletz.
Charles Stewart,

Risposte:


13

Ho cercato su Google molto ;-) A quanto ho capito, la memoria virtuale di un determinato processo è divisa in pagine che sono gestite dal sistema operativo e presentate all'applicazione come se fosse RAM.

In OS X, basato sul kernel Mach, questo è gestito da un demone chiamato dynamic_pager. Questo processo genera i file di scambio /private/var/vmcome indicato. Questi file di scambio non vengono generati in base all'applicazione, ma in base alla "memoria necessaria". I file di scambio vengono suddivisi in pagine di 4096 byte e le pagine vengono quindi allocate ai processi che (sono considerati dal sistema operativo) necessitano di memoria virtuale. Pertanto, non è possibile associare un file di scambio a una determinata applicazione, ma è possibile vedere quante pagine sta utilizzando un determinato processo.

Potresti provare il comando vm_statin Termiale. Questo ti dà una statistica dell'uso della VM (nota che "dimensione della pagina" per numero di pagine attive è uguale alla dimensione del tuo (i) file di scambio). Ciò spiega anche perché è possibile disporre di più processi tramite VM, ma solo un paio di file di scambio.

Altri comandi divertenti sono vmmap [process id]e pagestuff.



Sembra promettente. Ciò sembra fornire una risposta definitiva alla prima parte della domanda ed è indicativo di una risposta concreta alla seconda parte. Ho bisogno di approfondire ...
Charles Stewart,

Non è vmmap [pid]o vmmap -pages [pid]la risposta per la seconda parte della tua domanda?
trolle3000,

vmmap $ pid fornisce informazioni inequivocabili su ciò che classifica come regioni scrivibili. Non distingue tra memoria allocata (cioè scambiabile) e memoria scambiata per regioni di sola lettura, ma forse lì la distinzione non è così importante. Accetterò molto probabilmente questa risposta domani.
Charles Stewart,

5

Il vmmap PIDcomando dovrebbe darti alcune statistiche utili in numeri su un determinato processo.


funziona anche vmmap [AppName]
Studer

4

Sulla base delle idee pubblicate qui ho creato questa piccola riga di codice:

sudo vmmap notifyd | grep -A3 'Summary'

che visualizza la sezione Riepilogo (3 righe) dell'output vmmap. Ho usato notifydin questo esempio, ma puoi sostituirlo con qualsiasi PID che conosci.

Questa riga tenterà di elencare tutte le righe di riepilogo di tutti i processi in esecuzione. Ovviamente alcuni falliranno perché il loro id di processo è già sparito (processo terminato), ma in generale ho scoperto che questo è un ottimo modo per scorrere un elenco di informazioni sulla memoria e individuare lo swapper principale.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

Modificato: alcuni utenti anonimi hanno visto che quest'ultima riga di comando aveva bisogno di un miglioramento perché ovviamente la variante originale non funzionava più. Quindi grazie mille chiunque tu sia e mi dispiace che la tua modifica sia stata respinta. (Il primo comando in precedenza leggeva 'ps xa' e faceva fallire vmmap a causa del lancio del titolo di ps)

Ulteriore miglioramento: se ti piace conoscere subito il nome del programma, usa questa piccola modifica

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

Una piccola modifica all'altra estremità di questo comando consente di filtrare determinati nomi di programma o componenti del percorso della riga di comando. Qui stiamo esaminando tutti i processi da 'Library / PrivateFrameworks' solo per esempio.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

Ricevo molti fallimenti dicendo che vmmap non può essere lanciato come un processo a 32 ma che ferma gli xargs. Per far continuare le carte, l'ho fatto ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'. Non si ferma ancora su ctrl + c, ma non si ferma nemmeno agli errori vmmap.
ShadSterling

0

Apri Activity Monitor nella cartella / Applicazioni / Utility e c'è una colonna di memoria virtuale che ti dirà questo. È possibile fare clic sull'intestazione della memoria virtuale per ordinare in base all'utilizzo più o meno utilizzato dall'applicazione. Assicurati anche di modificare I miei processi in Tutti i processi e tieni presente che un'applicazione potrebbe avere più processi. Ad esempio, l'applicazione di terze parti Little Snitch comprende "Little Snitch Network Monitor" e "Little Snitch UIAgent".


4
È sbagliato. Il nubmer nella colonna di memoria virtuale è una somma di memoria attualmente in RAM e su file swap, mmaped e non so cos'altro.
Tadeusz A. Kadłubowski,

Sei sicuro? Apple non lo menziona support.apple.com/kb/TA20517
ridogi il

1
Il numero di VM misura la quantità assegnata ma non ancora effettivamente utilizzata. I file di scambio avranno ciò che viene effettivamente utilizzato.
Chealion,

@Chealion: come definisci la memoria allocata ma non effettivamente utilizzata?
Tadeusz A. Kadłubowski,

@tkadlubo: In questo caso, la mia convinzione è che si tratti solo della discrepanza tra le dimensioni della VM dichiarate disponibili per un processo rispetto alle pagine effettive, paginate su disco. Non sono sicuro di come definirlo oltre a notare che il numero di VM e i file di scambio sul disco sono diversi.
Chealion,

0

Come ha detto Ridogi, apri Activity Monitor. Passare al processo che si desidera ispezionare e fare clic su ... Ispeziona! Quindi fare clic su memoria; questo ti dirà quanto swap sta utilizzando il processo dato.

Divertiti!


3
La pagina di ispezione mi dice tutti i tipi di cose interessanti che sono positivamente correlate a quale sia la risposta alla domanda, come #pagefaults, #pageins e l'elenco dei file mmapped, ma da nessuna parte la risposta effettiva alla domanda che sto cercando.
Charles Stewart,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.