Я думал, что вся суть подкачки заключается в том, чтобы действовать как временная сеть безопасности хранения, когда ОЗУ заполнена, но мой раздел подкачки постоянно используется, хотя иногда у меня бывает до 3 ГБ свободной ОЗУ. Это нормально?
kernel
swap
memory-usage
Мистерио
источник
источник
free -m
,top -b 1
Ответы:
Вы можете попробовать изменить значение "swappiness":
Из FAQ по Ubuntu Swap :
Также вы можете проверить: https://askubuntu.com/a/103916/54187
источник
sudo sysctl --load=/etc/sysctl.conf
после редактирования файла, чтобы применить измененияЕсть несколько разных аспектов вашего вопроса.
Во-первых, каково ваше определение «бесплатный». На самом деле это не так просто, как кажется в Linux (или любой современной операционной системе).
Как Linux использует оперативную память (очень упрощенно)
Каждое приложение может использовать часть вашей памяти. Linux использует всю остальную незанятую память (кроме последних нескольких Мб) в качестве «кэша». Это включает в себя кэш страниц, кэши узлов и т. Д. Это хорошо - это помогает ускорить работу кучи. Как запись на диск, так и чтение с диска могут быть значительно ускорены кэшем.
В идеале у вас достаточно памяти для всех ваших приложений, и у вас еще есть несколько сотен Мбайт для кеша. В этой ситуации, пока ваши приложения не увеличивают использование памяти и система не пытается получить достаточно места для кэша, не требуется никакой подкачки.
Как только приложения требуют больше оперативной памяти, они просто уходят в часть пространства, которое использовалось кешем, сокращая кеш. Распределение кеша является дешевым и достаточно простым, что выполняется просто в режиме реального времени - все, что находится в кеше, является либо просто второй копией того, что уже находится на диске, поэтому его можно просто мгновенно освободить, либо это то, что мы бы сделали все равно пришлось записать на диск в течение следующих нескольких секунд .
Это не специфическая ситуация для Linux - все современные операционные системы работают таким образом. Различные операционные системы могут просто сообщать о свободной оперативной памяти по-разному: некоторые включают кэш как часть того, что они считают «свободным», а некоторые - нет.
Когда вы говорите о свободной оперативной памяти, гораздо важнее включить кэш, потому что он практически бесплатный - он доступен, если любое приложение запросит его. В Linux
free
команда сообщает об этом обоими способами - первая строка включает кэш в столбце используемой оперативной памяти, а вторая строка включает кэш (и буферы) в свободном столбце.Как Linux использует своп (еще более упрощенный)
После того, как вы израсходовали достаточно памяти, которой недостаточно для бесперебойной работы кэша, Linux может решить перераспределить часть неиспользуемой памяти приложения из ОЗУ для замены.
Это не делает это в соответствии с определенным отключением. Это не значит, что вы достигли определенного процента распределения, тогда Linux начинает меняться. У него довольно «нечеткий» алгоритм. Принимается во внимание множество вещей, которые лучше всего можно описать как «насколько сильно давление для выделения памяти». Если существует большое «давление» для выделения новой памяти, то это увеличит шансы, что некоторые из них будут заменены, чтобы освободить место. Если будет меньше «давления», это уменьшит эти шансы.
Ваша система имеет настройку «swappiness», которая помогает вам настроить, как рассчитывается это «давление». Обычно не рекомендуется изменять это вообще, и я бы не рекомендовал вам изменять это. Обмен в целом - очень хорошая вещь - хотя есть несколько крайних случаев, когда это снижает производительность, если вы посмотрите на общую производительность системы, это чистая выгода для широкого круга задач. Если вы уменьшите объем перестановки, вы позволите уменьшить объем кеш-памяти немного больше, чем это было бы в противном случае, даже если это действительно может быть полезно. Является ли это достаточно хорошим компромиссом для любой проблемы, с которой вы сталкиваетесь при обмене, зависит от вас. Вы должны просто знать, что вы делаете, вот и все.
Существует хорошо известная ситуация, когда своп действительно снижает воспринимаемую производительность в настольной системе, и это происходит из-за того, как быстро приложения могут снова реагировать на пользовательский ввод после долгого простоя и большого количества фоновых процессов в IO (таких как ночное резервное копирование) запустить. Это очень заметная медлительность, но ее недостаточно, чтобы оправдать отключение свопа, и ее очень трудно предотвратить в любой операционной системе. Отключите подкачку, и эта первоначальная медлительность после резервного копирования / проверки на вирусы может не произойти, но система может работать немного медленнее в течение всего дня. Эта ситуация не ограничивается Linux.
При выборе того, что следует перенести на диск, система пытается выбрать память, которая фактически не используется - для чтения или записи. Он имеет довольно простой алгоритм для расчета этого, который выбирает большую часть времени.
Если у вас есть система с огромным объемом ОЗУ (на момент написания 8 ГБ - это огромный объем для типичного дистрибутива Linux), то вы очень редко попадете в ситуацию, когда подкачка вообще нужна. Вы можете даже попробовать отключить своп. Я никогда не рекомендую делать это, но только потому, что вы никогда не знаете, когда больше оперативной памяти может спасти вас от сбоя некоторых приложений. Но если вы знаете, что вам это не понадобится, вы можете это сделать.
Но как обменяться может ускорить мою систему? Разве обмен не замедляет вещи?
Передача данных из оперативной памяти в swap - это медленная операция, но она выполняется только тогда, когда ядро почти уверено, что общее преимущество перевесит это. Например, если память вашего приложения выросла до такой степени, что у вас почти не осталось кеша, и ваш ввод-вывод очень неэффективен из-за этого, вы можете на самом деле добиться гораздо большей скорости из своей системы, освободив часть памяти, даже после первоначальной стоимости обмена данными, чтобы освободить их.
Это также последнее средство, если ваши приложения действительно запрашивают больше памяти, чем у вас есть. В этом случае обмен необходим для предотвращения ситуации нехватки памяти, которая часто приводит к сбою приложения или его принудительному уничтожению.
Подкачка связана только со временем, когда ваша система работает плохо, потому что это происходит в то время, когда у вас заканчивается неиспользуемая оперативная память, что может замедлить работу вашей системы (или сделать ее нестабильной), даже если у вас не было подкачки. Таким образом, чтобы упростить вещи, обмен происходит, потому что ваша система увязла, а не наоборот.
Когда данные в свопе, когда они выходят снова?
Перенос данных из подкачки (по крайней мере для традиционных жестких дисков) так же трудоемок, как и вставка их туда. Понятно, что ваше ядро будет так же неохотно удалять данные из свопинга, особенно если они на самом деле не используются (то есть читаются или записываются). Если у вас есть данные в обмене , и это не используется, то на самом деле это хорошо, что она остается в своп, так как она оставляет больше памяти для других вещей , которые являются используются, потенциально ускорения вашей системы.
источник
free -m
.Установка значения подкачки не работает в каждой ситуации. Если это работает для вас, отлично. Если нет, я написал скрипт для периодической очистки свопа, выключая и снова включая его.
Переключение с переключением немного рискованно, если вы не будете осторожны. Если у вас недостаточно свободной оперативной памяти для хранения всего в оперативной памяти, а также всего содержимого подкачки, попытка отключить подкачку приведет к тому, что ваша система перестанет отвечать на запросы. Мой сценарий сначала проверяет, достаточно ли свободной оперативной памяти (что занимает немного времени, так как фактический объем свободной оперативной памяти отличается от того, что
free
сообщается как свободная), а затем только переключает своп, если это так. Но, если у вас мало оперативной памяти, не запускайте другой важный процесс во время работы скрипта. Вот:Вы должны запустить этот скрипт от имени пользователя root (например, с помощью
sudo
). Этот скрипт не оставит вашу систему без ответа; если у вас недостаточно оперативной памяти, он не сможет переключить своп. Я использовал этот скрипт без проблем в течение почти пяти лет.источник
Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки.
Это приводит к тому, что несколько затронутых программ работают медленно.
Если у вас много оперативной памяти, вы можете выключить своп, выполнив команду:
swapoff -av
(вам понадобятсяsudo
права на нее.)Если вам не нравится своп, вы можете включить его, используя симметричную команду:
swapon -av
( сноваsudo
требуется).источник
Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. У многих программ есть код (и данные), который используется редко. Как только память выгружается, она вряд ли будет выгружена.
Один из способов принудительно перенести эти страницы в память - отключить устройство подкачки. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти радикальные вещи.
Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет выгружаться, как и остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.
В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно дополнительное пространство подкачки временно.
источник
Я отредактировал скрипт Scott Severance, чтобы он соответствовал более новым версиям free, которые уже включают в себя поле общей доступной памяти.
источник