В течение многих лет у меня возникала одна и та же проблема с моими небольшими конфигурациями Ubuntu: используемое пространство подкачки увеличивается со временем. У меня складывается впечатление, что это происходит главным образом потому, что выделенная память никогда не возвращается в ОЗУ, даже если для этого достаточно места, за исключением действий пользователя, таких как отключение подкачки.
Я сделал короткую cron
команду, чтобы автоматизировать это, и у меня хорошие результаты:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Но поскольку это скорее хитрость, чем реальное решение этой проблемы, я задаюсь вопросом о возможных причинах, по которым это может быть плохой идеей, или как я могу улучшить этот скрипт, чтобы сделать его немного более умным?
Ответы:
Используя это так: да, плохо. Вам действительно нужно проверить, достаточно ли памяти, прежде чем выключать своп. Смотрите /ubuntu//a/90399/15811 для лучшей версии.
Также: ты уверен в этом? Распределение свопа не означает использование свопа. Команда
vmstat
, столбцыsi
(поменять местами) иso
(поменять местами). Если те остаются 0, у вас есть другая проблема. По моему опыту, своп вряд ли используется, и вы, возможно, не используете его, думая, что он не опустошает его, но нечего опустошать.источник
vmstat
.Я бы сказал, что это плохая идея. Если вы считаете, что у вас есть свободная память и активный процесс не перемещается из раздела подкачки в ОЗУ, то либо у вас недостаточно свободной памяти, чем вы думаете, либо процесс не так активен, как вы думаете является.
Если активный процесс продолжает меняться, вы должны исправить все, что вызывает нагрузку на память. Если это не активный процесс, в чем дело?
источник
Это плохая идея.
Ядро начинает копировать (не перемещать) данные для замены задолго до того, как физическая память близка к заполнению, потому что, если какой-либо процесс когда-либо требует много памяти, любая страница, которая уже имеет действительную копию в разделе подкачки, может быть немедленно повторно использована без необходимости повторной записи. на диск.
Как правило, это происходит в основном для страниц, к которым не обращались в течение длительного времени, что является хорошим показателем того, что вряд ли они будут доступны в ближайшее время.
Если вы явно отбрасываете копии, это не приносит никакой пользы, поскольку данные все еще существуют в ОЗУ, но могут стоить вам ускорения, когда какой-то процесс хочет выделить много памяти, и замена становится необходимой.
Ядро также всегда будет использовать пространство подкачки, как только физическая память заполнится более чем на 50%, поэтому эти цифры будут отличны от нуля, даже если у вас достаточно памяти.
источник
/proc/sys/vm/swappiness
него оставлено значение по умолчанию70
, что хорошо для серверов и довольно агрессивно выводит грязные страницы из процессов, которые их не трогали какое-то время, чтобы освободить место для дополнительного кэша страниц. Это часто плохо для настольных компьютеров, потому что alt-tab может работать медленно.swappiness=70
), но задержка важнее для взаимодействия с пользователем на рабочем столе. Это компромисс. Если вы регулярно компилируете вещи, которые немного слишком велики, чтобы оставаться в кэше страниц, то, конечно, оставьтеswappiness
немного выше, например, 20 или 30 вместо 5 или 10. См. Также akitaonrails.com/2017/01/17/optimizing-linux-for медленные компьютеры . Значениеvm.vfs_cache_pressure
ниже 100 также способствует кэшированию метаданных inode / directory над страницами данных, что также хорошо для отзывчивости пользовательского интерфейса.Это плохая идея. Если бы это было полезно, ядро Linux реализовало бы это таким образом. Я не верю, что есть причина менять больше, чем несколько параметров настройки, так как такой простой сценарий оболочки, скорее всего, не более умный, чем алгоритмы разработчиков ядра.
У вас есть два случая:
Итак, есть два основных момента:
Несмотря на отсутствие проблем с нехваткой памяти в слишком многих программах, некоторые программы могут распределять память на основе свободной оперативной памяти (возможно, ваш браузер будет использовать больше памяти кэша, и вы сможете просматривать ее быстрее), а ядро может использовать свободную память для кэширования диска и аналогичные оптимизации. Когда вы заставляете ваш подкачку быть пустым, ядро удаляет свой кэш чтения, и, например, запуск нового экземпляра Firefox займет больше времени, чем когда Firefox все еще находится в дисковом кеше.
Если вы хотите настроить поведение ядра, смотрите параметр swappiness .
Два дополнительных ресурса предоставлены @ peter-cordes:
Если вы действительно хотите иметь пустой своп, вы можете отключить своп навсегда. Я не понимаю, почему его включение в течение часа, а затем его опустошение имеет преимущества по сравнению с отсутствием свопинга.
источник
Вы можете достичь тех же результатов, сказав ядру освободить кеши:
Таким образом вы избегаете кратковременного возможного истощения памяти и оставляете ядру решать, что необходимо, а что можно отбросить.
источник
Вопреки общему мнению, SWAP сам по себе неплохой .
Что на самом деле замедляет работу вашей системы, так это активность ядра, которая перемещает Данные из ОЗУ в SWAP и обратно в ОЗУ
swappiness
.Система делает это автоматически, так как она настроена с помощью
swappiness
.Это приводит к тому, что память из неактивных процессов сбрасывается в раздел жесткого диска.
Я сам в течение многих лет работал с машиной, на которой не было такого большого количества оперативной памяти, и у меня всегда было немного используемой памяти SWAP. Тем не менее, моя машина работала нормально, пока вы не начали перемещать память обратно в ОЗУ, возможно, пытаясь закрыть открытое приложение. Затем рабочая нагрузка начала увеличиваться.
Скорее, я бы посоветовал вам внимательно изучить, какое приложение использует вашу память в командной строке вместе с
htop
приложением, и решить закрыть какое-либо приложение. Этоgnome-system-monitor
может дать вам хорошее понимание, в его вкладке Process.Если у вас большие приложения, которые используют много оперативной памяти. Не запускайте их все сразу.
источник