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