====== Методы определения занимаемой процессом памяти ====== ===== 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 (?)|