Инструменты пользователя

Инструменты сайта


devel_mem

Методы определения занимаемой процессом памяти

Linux

http://stackoverflow.com/questions/131303/how-to-measure-actual-memory-usage-of-an-application-or-process

Командная строка:
top
pmap
cat /proc/<pid>/status
cat /proc/<pid>/smaps''

ПРИМЕРЫ

cat /proc/<pid>/status:

Name:	rcomd
State:	S (sleeping)
Tgid:	10577
Ngid:	0
Pid:	10577
PPid:	8259
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	100	100	100	100
FDSize:	256
Groups:	5 7 10 14 16 17 20 21 25 33 100 482 
VmPeak:	  361264 kB
VmSize:	  361240 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	   12208 kB
VmRSS:	   12188 kB
VmData:	  312164 kB
VmStk:	     136 kB
VmExe:	    1456 kB
VmLib:	   13812 kB
VmPTE:	     148 kB
VmSwap:	       0 kB
Threads:	5
SigQ:	0/31464
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000001000
SigIgn:	0000000000001000
SigCgt:	0000000180004002
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000003fffffffff
Seccomp:	0
Cpus_allowed:	f
Cpus_allowed_list:	0-3
Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	156306
nonvoluntary_ctxt_switches:	724

Windows NT

Windows
GetProcessMemoryInfo()

PROCESS_MEMORY_COUNTERS memCounter;
bool result = GetProcessMemoryInfo(GetCurrentProcess(),
                                   &memCounter,
                                   sizeof( memCounter ));
// http://en.wikichip.org/wiki/Resident_set_size#.2Fproc.2Fself.2Fstat -- is it right???
// From https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms684879%28v=vs.85%29.aspx
// * The working set is the amount of memory physically mapped to the process context at a given time. 
// * Memory in the paged pool is system memory that can be transferred to the paging file on disk (paged) when it is not being used. 
// * Memory in the nonpaged pool is system memory that cannot be paged to disk as long as the corresponding objects are allocated. 
// * The pagefile usage represents how much memory is set aside for the process in the system paging file.



typedef struct _PROCESS_MEMORY_COUNTERS {
  DWORD  cb;
  DWORD  PageFaultCount;
  SIZE_T PeakWorkingSetSize;
  SIZE_T WorkingSetSize;
  SIZE_T QuotaPeakPagedPoolUsage;
  SIZE_T QuotaPagedPoolUsage;
  SIZE_T QuotaPeakNonPagedPoolUsage;
  SIZE_T QuotaNonPagedPoolUsage;
  SIZE_T PagefileUsage;
  SIZE_T PeakPagefileUsage;
} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;

Методом проб найдено следующее соответствие:

http://windows.microsoft.com/ru-ru/windows/what-task-manager-memory-columns-mean#1TC=windows-7

Название в менеджере задачОписаниеПоле структуры PROCESS_MEMORY_COUNTERS
Память - рабочий наборОбъем памяти в частном рабочем наборе плюс объем памяти, используемой процессом, которую нельзя использовать совместно с другими процессами.WorkingSetSize
Память - пик рабочего набораМаксимальный объем памяти рабочего набора, использованный процессом.PeakWorkingSetSize
Память - дельта рабочего набораИзменение объема памяти рабочего набора, используемой процессом.-
Память - частный рабочий наборЧастный рабочий набор показывает конкретный объем используемой процессом памяти, который данный процесс не может использовать совместно с другими процессами.-
Память - выделенная памятьОбъем виртуальной памяти, выделенной процессу.PagefileUsage
Память - выгружаемый пулОбъем страничной виртуальной памяти ядра, выделенной ядром или драйверами процессу. Страничная виртуальная память - это память, которую можно переписать на другой носитель, например жесткий диск.QuotaPagedPoolUsage (?)
Память - невыгружаемый пулОбъем невыгружаемой памяти ядра, выделенной ядром или драйверами процессу. Невыгружаемая память - это память, которую нельзя переписать на другой носитель.QuotaNonPagedPoolUsage (?)
devel_mem.txt · Последние изменения: 2015/08/26 14:57 (внешнее изменение)