sunny1983
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Пытаюсь понять как получить информацию по свободной и занятой памяти в GNU/Linux, используя инструменты top, ps, free, smem и файловую систему /proc 1. Итак, если использовать файловую систему /proc, которую используют все эти инструменты, то в файле /proc/meminfo можно найти строки MemTotal, MemFree, Cached и другие. При этом свободная память в Linux - это сумма MemFree+Cached+Buffers. 2. Также в этом файле есть строка, в которой указан объём памяти занимаемой ядром, это - это Slab. 3. А вот память, занимаемую процессами userspace можно узнав, только вычев из MemTotal свободную память, вычисленную в пункте 1, и Slab. 4. Занятую память можно посчитать, вычев из полного объёма памяти свободную, но вот посчитать, просуммировав занятую память всех процессов не получится, так как занятая память каждым отдельным процессом включает в себя также и разделяемую память, и если просуммировать, то фактически просуммируешь одни и те же чиста несколько раз, то есть результат будет больше чем фактически занимаемая память. 4. Если смотреть что выводит команда top, то там есть столбец VIRT, то есть размер виртуальной памяти, доступной процессу, эти же данные есть и в файловой системе /proc в файле /proc/PID/status в строке VmSize, но это виртуальная память, то есть вся память, которую может выделить процессу ядро, на самом деле память, реально используемая процессом - это сумма столбца RES (резидентная) и SHR (разделяемая). А вот пытаться проссумировать все процессы между собой не нужно как раз из-за разделяемой памяти, то есть страниц, используемых одновременно несколькими процессами. А теперь вопрос, который относится к реальной задаче. Есть некий процесс, который потребляет 13,5% памяти, по данным top, то есть процентное отношение VmSize к MemTotal. А вот свободная память вычелненная по п.1 в отношении к MemTotal- 67,2%. Как понять куда делись оставшиеся 57,3? Другие процессы потребляют не более чем 0.1% каждый, так что на разделяемую память тут не спишешь. |