Perché il valore di VSIZE in alto è diverso dal valore di VSZ (Dimensione del set virtuale) in ps?


9

So che VSZ in psè per lo spazio di indirizzi totale allocato per l'app ed è talvolta aliasato come vsize (menzionato nella pagina man di pssu linux), ma qual è la definizione di VSIZE in top? Questo output superiore da iPhone è diverso dal top su Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324

Non riesco a riprodurlo su nessuna delle mie macchine darwin. Mi fa pensare che la shell che hanno configurato sull'iPhone avesse uno strano set di blocchi?
polinomio,

sembrano calcolare RSIZE / rss allo stesso modo, ma ps sta segnalando un vsz 2,5x più grande di quello riportato da top. forse topsu IOS non include oggetti condivisi in vsize o qualcosa del genere.
Tim Kennedy,

"Questa uscita superiore da iPhone è diversa da quella superiore su Linux" - non è una sorpresa, vero?
poige,

Risposte:


5

Il sistema di memoria Linux è pieno di molte routine di utilità di ottimizzazione della memoria e condivisione della memoria, rendendo l'idea stessa di come la memoria viene condivisa e consumata tra di loro, un approccio ingombrante. L'output di ps e altri comandi relativi a ps elaborano tutti il ​​loro output dai dati nel /procfilesystem. Particolarmenteps, RSS (memoria dimensionale residente) e VSIZE (dimensione della memoria virtuale) sono entrambi importanti, tuttavia VSIZE non mostra l'uso accurato della memoria e la differenza tra VSIZE e rss è ciò che è effettivamente previsto e allocato al programma durante l'inizializzazione ma potrebbe non essere ancora referenziato. Ad esempio, il programma può avere molte librerie collegate ma non sono ancora state caricate perché non sono ancora referenziate durante l'esecuzione effettiva del programma. RSS fornisce la memoria totale effettivamente utilizzata dal programma ma potrebbe non fornire un'immagine reale del consumo di memoria, poiché la maggior parte della memoria allocata può essere condivisa con altre istanze dello stesso processo o altri processi. Guardare sotto /proc/<processid>/mapspuò dare un'idea approssimativa di come è stata usata la memoria, ma a volte possono essere fuorvianti. Usopmap -x <pid> dalla riga di comando, è utile vedere lo spreadup.

Le utility spesso migliori sono freee vmstat. freeti fornirà i dettagli generali sul consumo di memoria corrente e vmstat può essere usato per vedere con che frequenza viene aggiornato.


Un'altra ragione o spiegazione ponderata del motivo per cui ps NON dovrebbe essere considerato come un uso corretto della memoria di processo. Leggi questo su virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley

2
Ciò che il poster di questa risposta sta cercando di dire è che la definizione di memoria utilizzata è complessa e varia. Non esiste un unico posto nel kernel in cui venga tracciato e segnalato. Le utility eseguono la propria interpretazione delle numerose statistiche riportate dal kernel.
Johan
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.