Я пытаюсь найти метрику для использования, которая скажет мне, окажет ли запуск другого процесса, предполагающего использование N байтов памяти, отрицательное влияние на производительность системы.
Я знаю что /proc/meminfo
поля MemFree
, Buffers
, и Cached
можно складывать вместе, чтобы получить общую память, доступную программам. Однако я бы предпочел не выжимать кеш, который на самом деле используется с пользой (рабочая нагрузка приводит к появлению горячих точек на диске).
В Active
вход в /proc/meminfo
кажется, это можно сравнить с MemTotal
чтобы определить, сколько памяти доступно (либо путем замены чего-то простаивающего, либо, в первую очередь, освобождения), но я не смог найти много информации о Active
и поэтому я не уверен.
Должен ли я стремиться иметь Active
память как можно ближе к MemTotal
не переходя, как я могу справиться?
Есть ли другой способ оценить поведение памяти при запуске другого процесса?
После экспериментов кажется, что активная память - хороший показатель.
Мы наблюдали, что при падении свободной памяти до нуля будет происходить очень низкая частота вывода страниц, так как неактивная память начинает выгружаться (для нашей системы порядка от 10 до 100 с в секунду). Фактическая замена приведет к увеличению количества выводимых страниц в секунду в 10–100 раз. В итоге мы выбрали 1000 страниц в секунду в качестве точки отсечения, чтобы различать извлечение неактивной памяти и фактическую подкачку, влияющую на производительность.
Нам не очень повезло с доведением активной памяти до 100% от общего объема, но это во многом связано с формой работы, которую мы делаем (сначала мы ограничиваем ресурсы ЦП). Мы решили, что для нашей рабочей нагрузки любое количество активной памяти, превышающее 75%, означает, что мы больше не должны запускать новый процесс, хотя наши ограничения нагрузки и скорость порождения новых процессов, как правило, фактически ограничивают создание нашего процесса, поэтому это происходит с серьезные предостережения.