2013-06-18 13 views
6

Ho una piccola domanda riguardante VmSize, nella documentazione che dovrebbe essere l'utilizzo della memoria dell'applicazione.VmSize = memoria fisica + scambio?

Tuttavia sul mio sistema:

VmSize = memoria fisica + swap VmHWM sembra più simile a ciò che l'applicazione in realtà sarebbe utilizzando.

[[email protected] ~]# free -m 
      total  used  free  shared buffers  cached 
Mem:   12012  9223  2788   0  613  1175 
-/+ buffers/cache:  7434  4577 
Swap:   3967   0  3967 


[[email protected] ~]# cat /proc/8268/status 
Name: mysqld 
State: S (sleeping) 
Tgid: 8268 
Pid: 8268 
PPid: 1 
TracerPid:  0 
Uid: 89  89  89  89 
Gid: 89  89  89  89 
FDSize: 512 
Groups: 89 
VmPeak: 15878128 kB 
VmSize: 15878128 kB 
VmLck:   0 kB 
VmPin:   0 kB 
VmHWM: 7036312 kB 
VmRSS: 7036312 kB 
VmData: 15839272 kB 
VmStk:  136 kB 
VmExe:  10744 kB 
VmLib:  6356 kB 
VmPTE:  16208 kB 
VmSwap:  0 kB 
Threads:  265 
SigQ: 0/96048 
SigPnd: 0000000000000000 
ShdPnd: 0000000000000000 
SigBlk: 0000000000087007 
SigIgn: 0000000000001000 
SigCgt: 00000001800066e9 
CapInh: 0000000000000000 
CapPrm: 0000000000000000 
CapEff: 0000000000000000 
CapBnd: 0000001fffffffff 
Seccomp:  0 
Cpus_allowed: fff 
Cpus_allowed_list:  0-11 
Mems_allowed: 00000000,00000001 
Mems_allowed_list:  0 
voluntary_ctxt_switches:  2567 
nonvoluntary_ctxt_switches:  77 

Qualche idea del perché? Provo a ottenere l'utilizzo della memoria per questa applicazione in particolare, ma questo risultato non ha molto senso.

Grazie.

risposta

4

VmSize è la somma di tutta la memoria mappata (/proc/pid/maps)

+0

Grazie per questa risposta. Quindi Vmsize è la quantità di memoria effettivamente raggiungibile dall'applicazione allora? Se desidero ottenere l'attuale utilizzo della memoria della mia applicazione, cosa devo fare? "VmRSS: Resident set size" sarebbe un buon candidato? Questo valore include anche le librerie? Voglio prendere tutti i segmenti in account, codice, dati, stack e heap per l'applicazione e sono libs. Grazie. – rubymonk

+3

Sì, RSS è il conteggio di tutta la memoria fisica utilizzata attualmente dal processo, ma esclude lo swap (presentato da VmSwap). –

5

VmSize è lo "spazio indirizzo" che il processo ha in uso: il numero di indirizzi disponibili . Questi indirizzi non devono avere alcuna memoria fisica collegata a loro. (Memoria fisica In allegato è la figura RSS)

È possibile verificare questo assegnando un pezzo di memoria con p = malloc(4 * 1024 * 1024);, e non facendo nulla per *p: il VmSize aumenterà di 1K pagine, ma il RSS sarà (circa) lo stesso. (il tuo programma avrà una memoria più descrittiva, ma non lo indirizza, quindi non è necessario che la memoria sia allegata)

+0

Quindi nel mio caso, l'applicazione riserva uno spazio uguale alla dimensione del mio pmem + swap? – rubymonk

+0

No, niente è riservato. E lo swap è più o meno irrilevante qui. – wildplasser

Problemi correlati