2013-06-18 15 views
6

Mam małe pytanie dotyczące VmSize, w dokumentacji ma być wykorzystanie pamięci przez aplikację.VmSize = pamięć fizyczna + zamiana?

Jednak w moim systemie:

VmSize = pamięć fizyczna + Swap VmHWM wydaje się bardziej jak co aplikacja faktycznie będzie używany.

[[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 

Każdy pomysł dlaczego? Próbuję w szczególności wykorzystać pamięć dla tej aplikacji, ale ten wynik nie ma większego sensu.

Dzięki.

Odpowiedz

4

VmSize jest sumą wszystkich odwzorowanym pamięci (/proc/pid/maps)

+0

Dziękuję za tę odpowiedź. Więc Vmsize to ilość pamięci faktycznie dostępnej dla aplikacji? Jeśli chcę uzyskać bieżące wykorzystanie pamięci przez moją aplikację, co powinienem wziąć? "VmRSS: Resident set size" byłby dobrym kandydatem? Czy ta wartość zawiera również biblioteki? Chcę wziąć wszystkie segmenty na konto, kod, dane, stos i stertę dla aplikacji i jej bibliotek. Dziękuję. – rubymonk

+3

Tak, RSS jest liczbą pamięci fizycznej aktualnie używanego procesu, ale nie uwzględnia zamiany (która jest prezentowana przez VmSwap). –

5

VMsize jest „przestrzeń adresowa”, że proces jest w użyciu: liczba dostępnych adresów. Adresy te nie muszą zawierać żadnej fizycznej pamięci. (Dołączony do pamięci fizycznej jest postać RSS)

Można to sprawdzić poprzez przydzielenie kawałek pamięci z p = malloc(4 * 1024 * 1024); i nie robi nic, aby *p: the VmSize wzrośnie o 1K stron, ale RSS będzie (o) to samo. (Twój program będzie miał bardziej adresowaną pamięć, ale go nie adresuje, więc pamięć nie musi być załączona)

+0

Więc w moim przypadku, aplikacja rezerwuje przestrzeń równą wielkości mojego pmem + zamiana? – rubymonk

+0

Nie, nic nie jest zarezerwowane. A zamiana jest tutaj mniej lub bardziej nieistotna. – wildplasser