VmSize = физическая память + подкачка?



У меня есть небольшой вопрос относительно VmSize, в документации предполагается, что это использование памяти приложением.



Однако в моей системе:



VmSize = физическая память + подкачка
VmHWM больше похоже на то, что приложение на самом деле будет использовать.



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


[root@sun ~]# 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


Есть идеи, почему?
Я пытаюсь получить использование памяти для этого приложения в частности, но этот результат на самом деле не имеет смысла.



Спасибо.

575   2  

2 ответов:

VmSize-это сумма всей отображенной памяти.(/proc/pid/maps)

VMsize-это "адресное пространство", используемое процессом: количество доступных адресов . Эти адреса не должны иметь никакой физической памяти, связанной с ними. (Присоединенная физическая память-это рисунок RSS)

Вы можете проверить это, выделив кусок памяти с p = malloc(4 * 1024 * 1024);, и Не делать что-либо с *p: размер VmSize увеличится на 1K страниц, но RSS будет (примерно) таким же. (ваша программа будет иметь больше адресуемой памяти, но она не адресует ее, таким образом, память не должна быть прикреплена)

Comments

    Ничего не найдено.