====== Методы определения занимаемой процессом памяти ======
===== Linux =====
http://stackoverflow.com/questions/131303/how-to-measure-actual-memory-usage-of-an-application-or-process
Командная строка:
top
pmap
cat /proc//status
cat /proc//smaps''
ПРИМЕРЫ
cat /proc//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 (?)|