Почему используется своп, хотя у меня много свободной оперативной памяти?

Я думал, что вся суть подкачки заключается в том, чтобы действовать как временная сеть безопасности хранения, когда ОЗУ переполнена, но мой раздел подкачки постоянно используется, хотя иногда у меня есть до 3 ГБ свободной ОЗУ. Это нормально?

183
задан 30 June 2012 в 04:19

41 ответ

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

157
ответ дан 25 July 2018 в 18:15

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но вы можете экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

157
ответ дан 31 July 2018 в 10:25

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

157
ответ дан 31 July 2018 в 11:28

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

158
ответ дан 2 August 2018 в 00:28

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

158
ответ дан 4 August 2018 в 15:57

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Проверка значения подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

159
ответ дан 6 August 2018 в 00:35

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Проверка значения подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

159
ответ дан 7 August 2018 в 18:01

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать? изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но не стесняйтесь экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

159
ответ дан 10 August 2018 в 06:49

Вы можете попробовать изменить значение «swappiness»:

Из FAQ по свопингу в Ubuntu :

Что такое swappiness и как его использовать изменить его?

Параметр swappiness контролирует стремление ядра перемещать процессы из физической памяти на диск подкачки. Поскольку диски намного медленнее, чем ОЗУ, это может привести к снижению времени отклика для системы и приложений, если процессы слишком агрессивно перемещаются из памяти.

  1. swappiness может иметь значение от 0 до 100
  2. swappiness = 0 говорит ядру, чтобы как можно дольше не выгружать процессы из физической памяти
  3. swappiness = 100 говорит ядру агрессивно выгружать процессы из физической памяти и перемещать их в кэш подкачки

В Ubuntu по умолчанию установлено значение swappiness = 60. Снижение значения swappiness по умолчанию, вероятно, улучшит общую производительность для типичной установки Ubuntu на рабочем столе. Рекомендуется значение swappiness = 10, но вы можете экспериментировать. Примечание. Установки сервера Ubuntu предъявляют различные требования к производительности для настольных систем, и значение по умолчанию, вероятно, более подходит.

Чтобы проверить значение подкачки

cat /proc/sys/vm/swappiness

Чтобы изменить значение подкачки Временное изменение (потерянное при перезагрузке) со значением подкачки 10 можно сделать с помощью

sudo sysctl vm.swappiness=10

Чтобы сделать изменение постоянным, отредактируйте файл конфигурации в своем любимом редакторе:

gksudo gedit /etc/sysctl.conf

Найдите vm.swappiness и измените его значение по желанию. Если vm.swappiness не существует, добавьте его в конец файла следующим образом:

vm.swappiness=10

Сохраните файл и перезагрузитесь.

Также вы можете проверить: https://askubuntu.com/a/103916/54187

159
ответ дан 15 August 2018 в 18:45
  • 1
    Бесполезные предположения: это на самом деле может быть выгодно для производительности - страницы, к которым не обращались в течение некоторого времени, могут быть скопированы в пространство подкачки, что позволяет ОС быстро их удалять, если ей когда-либо понадобится память, но содержимое страницы остается в памяти , – Simon Richter 30 June 2012 в 05:52
  • 2
    @SimonRichter Да, это идея. Однако в современных системах замена на 60, вероятно, слишком агрессивна, поскольку это означает, что вы начинаете менять местами, когда у вас еще есть несколько гигабайт свободной памяти. – Brendan Long 30 June 2012 в 06:31
  • 3
    – deFreitas 1 March 2018 в 10:51

есть несколько различных аспектов вашего вопроса.

во-первых, что ваше определение "свободный". Это на самом деле не так проста, как это звучит в Linux (или любой современной операционной системы).

как Linux использует оперативную память (очень упрощенный)

каждое приложение может использовать некоторые из вашей памяти. Linux использует все иначе незанятой памяти (за исключением последних нескольких Мб) как "кэш". Это включает в страница кэш, кеш inode и т. д. Это хорошо - она помогает ускорить кучи. Обе записи на диск и чтения с диска можно ускорить безмерно кэш.

в идеале у вас достаточно памяти для всех ваших приложений, и вы еще несколько сотен Мб осталось для кэша. В этой ситуации, пока Ваши заявки не увеличит их использования памяти и система не борется, чтобы получить достаточно пространства для кэша, нет необходимости для любой замены.

однажды исковых заявлений больше оперативной памяти, оно просто переходит в пространство, которое было использовано кэш, сжатие кэша. Де-выделения кэш-это дешевый и достаточно легкий, что это просто делается в реальном времени - все, что сидит в кэше либо просто вторую копию того, что уже на диске, так что можете просто быть освобождена мгновенно, или это то, что мы имели бы для очистки диска в течение нескольких секунд все иначе незанятой памяти.

это не та ситуация, что является специфичным для Linux - все современные операционные системы работают таким образом. В разных операционных системах может просто отчет свободной оперативной памяти по-разному: некоторые включают в себя кэш как часть того, что они считают "свободными", а некоторые не могут.

когда вы говорите о свободной оперативной памяти, это намного более значимым для включения кэша, потому что он практически бесплатный - это если какие-либо приложения. В Linux, [Ф1] команда сообщает его в обе стороны - первая линия включает в кэше в оперативной памяти столбец и вторая строка включает кэш (и буферы), в свободном столбце.

как Linux использует оперативную память (очень упрощенный)

после того как вы использовали достаточно памяти, что там не хватает для бесперебойной работы кэш-памяти, Линукс может принять решение о перераспределении некоторых неиспользуемых память приложений из оперативной памяти в своп.

он не делает этого по определенной отсечки. Это не так, как вы достигнете определенного процента распределения, то Linux начинает обменивать. Оно имеет довольно "алгоритм". Это занимает много вещей во внимание, которые может лучше всего быть описана "как есть для выделения памяти". Если есть большое "давление", чтобы выделить новую память, то это увеличит шансы некоторые будут заменены, чтобы сделать больше места. Если будет меньше "давление", то это уменьшит эти шансы.

ваша система имеет "подкачки" настройки, который поможет вам настроить, как это "давление" рассчитывается. Это обычно не рекомендуется изменять это, и я бы не советовал вам изменить его. Обмен-это в целом очень хорошо, хотя есть несколько пограничных случаев, когда это вредит производительности, если вы посмотрите на общей производительности системы это чистая выгода для широкого диапазона задач. Если уменьшить это поведение, вы позволяете объем кэш-памяти сжать немного сильнее, чем другие, даже если это действительно может быть полезной. Является ли это достаточно хороший компромисс для любой проблемы вы испытываете с перекачкой до вас. Вы должны просто знать, что ты делаешь, вот и все.

[dиода d17]хорошо известны ситуации, в которых своп действительно вредит производительности на настольном компьютере, а вот в том, как быстро приложения могут реагировать на пользовательский ввод снова после простоя в течение длительного времени и имеющих тяжелые фоновые процессы в ИО (например на ночь резервного копирования) запустить. Это очень видимой вялости, но не достаточно, чтобы оправдать отключение свопа все вместе и очень трудно предотвратить в любой операционной системе. Отключить своп и эта первоначальная вялость после вирусов резервное копирование/сканирование может не произойти, но система может работать немного медленнее всего дня. Это не та ситуация, чтобы ограниченная на Linux, либо.[!dиода d17]

при выборе того, что необходимо заменить диск, система пытается выбрать памяти, который фактически не используется - читать или написанные от. Он имеет довольно простой алгоритм вычисления это, что выбирает хорошо большую часть времени.

если у вас есть система, где у вас есть огромное количество оперативной памяти (на момент написания статьи, 8 ГБ-это огромная сумма для обычной дистром линукса), то вы будете очень редко когда-либо попали в ситуацию, когда своп вообще нужен. Вы можете даже попробовать включить своп выключен. Я никогда не рекомендую делать это, но только потому, что вы никогда не знаете, когда больше оперативной памяти может избавить вас от некоторых сбоев приложения. Но если ты знаешь, что ты не собираешься это нужно, вы включить сделать это.

но как поменять ускорить систему? Не меняя притормозить?

акт передачи данных из оперативной памяти в своп-медленная операция, но это только когда ядро почти уверен, что общая выгода перевешивают. Например, если приложение памяти возросла до такой степени, что у вас почти нет кэша влево и ввода/вывода является очень неэффективным из-за этого вы можете на самом деле получить гораздо больше скорости из вашей системы, освободив память, даже после того, как первоначальные затраты на обмен данными для того, чтобы освободить его.

это последнее средство, ваши приложения, на самом деле запрашивают больше памяти, чем вы есть на самом деле. В этом случае замена необходима для предотвращения нехватки памяти ситуацию, которая часто возникает сбой приложения или насильно убитых.

, меняя только далее со временем, когда ваша система работает плохо, потому что это происходит в то время, когда вы работаете из доступной оперативной памяти, которая будет замедлять работу системы (или сделать его неустойчивым) даже если у вас не было замены. Поэтому, чтобы упростить вещи, подкачка происходит потому, что ваша система не "увязли", а не наоборот.

но как поменять ускорить систему? Не меняя притормозить?

перенос данных из свопа (для традиционных жестких дисков, по крайней мере) просто отнимает много времени, как положить его туда. Так понятно, что ваше ядро будет так, как хочет, чтобы удалить данные из свопа, особенно если это на самом деле не используется (т. е. чтения или записи). Если у вас есть данные в своп, и это не используется, то это на самом деле хорошо, что он остается в своп, так как он оставляет больше памяти для других вещей, которые , потому что используется, потенциально ускорить вашу систему.

81
ответ дан 25 May 2018 в 09:11
  • 1
    +1 для подробного объяснения. Я также хотел бы сохранить своп 2GiB на своих компьютерах. Если что-то пойдет не так - утечки памяти и т. Д., Тогда вы можете увидеть, что своп идет вверх и ищет проблему до того, как возникнет нехватка памяти. Это система безопасности, а также инструмент для повышения производительности. – Joe 4 July 2012 в 23:48
  • 2
    На моем нетбуке, который имеет только 2 ГБ оперативной памяти, я держу 4 ГБ свопа. Это связано с тем, что я использую нетбук для гораздо большего, чем он предназначен, и для моих программ часто требуется более 2 ГБ памяти. Поскольку Linux ведет себя очень плохо в ситуациях с недостаточной памятью, я предпочитаю иметь большую систему безопасности. И у меня много дискового пространства. – Scott Severance 5 July 2012 в 07:15
  • 3
    Если вашим программам часто требуется более 2 ГБ памяти, я бы подумал о том, чтобы там было больше памяти (это ультра-дешево!), Потому что изнурительная оперативная память будет вредить производительности. В интересах других читателей: сделайте так, чтобы вы не просто смотрели на кэш-память, которая предположила , чтобы загрузить доступную оперативную память - см. Другие ссылки на free -m. – thomasrutter 5 July 2012 в 07:57
  • 4
    @neon_overload: Я должен просто отметить, что, согласно HP, максимальная оперативная память моего нетбука составляет 1 ГБ. У меня сейчас 2 ГБ, и интернет-источники предполагают, что 2 ГБ - это фактический максимум. Таким образом, необходимость такого рода обходных решений. – Scott Severance 5 July 2012 в 16:07
  • 5
    @thomasrutter: как ваш ответ меняется для больших серверов, один из моих имеет 1TB (да один полный терабайт) RAM и все еще использует swap; какая настройка swappiness и какой раздел подмены размера вы бы порекомендовали? – chrisinmtown 3 April 2015 в 18:08

Установка значения swappiness не работает в каждой ситуации. Если это сработает для вас, отлично. Если нет, я написал сценарий, чтобы периодически очищать своп, выключая его и снова включая.

Переключение swap немного рискованно, если вы не будете осторожны. Если у вас недостаточно свободной оперативной памяти для хранения всего в ОЗУ плюс все в свопе, попытка отключить своп приведет к тому, что ваша система перестанет реагировать. Мой скрипт сначала проверяет, достаточно ли свободной ОЗУ (что занимает немного времени, поскольку фактическое количество свободной ОЗУ отличается от того, что free сообщает как бесплатное), тогда только переключает swap, если это так. Но, если вы немного отстаете от ОЗУ, не запускайте еще один важный процесс во время работы скрипта. Вот он:

#!/bin/bash

# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8

# Calculate how much memory and swap is free
free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"

# Do the work
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    swapoff -a
    swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

Вы должны запустить этот скрипт как root (например, с помощью sudo). Этот скрипт не оставит вашу систему невосприимчивой; если у вас недостаточно ОЗУ, он откажется переключать swap. Я использовал этот скрипт без проблем уже около пяти лет.

21
ответ дан 25 May 2018 в 09:11
  • 1
    +1 для скрипта. Возможно, вам захочется немного модернизировать его, изменив MB на MiB на выходах. Я написал подобный сценарий без всех (хороших) тестов безопасности, которые вы включили. На моей старой тетради, где был использован обмен, потребовалось некоторое время, чтобы бежать - через минуту или две, но ничего не повредило. Через некоторое время он потерпит неудачу, потому что для его работы недостаточно свободной памяти, но это не вызвало дополнительных проблем. Я должен был перезагрузиться, чтобы разобраться, когда это произошло. Это связано с тем, что выглядело как утечка памяти в передаче (с тех пор, как я полагаю) и имеет только 2GiB RAM. – Joe 4 July 2012 в 23:36
  • 2
    Если что-то было перенесено на замену, и оно остается в свопе, это обычно хорошо - это означает, что данные фактически не используются, и он освобождает часть вашего ОЗУ для других вещей, что приводит к потенциальному повышению скорости. Что заставило вас поверить, что эти данные не должны быть заменены, и вместо этого следует использовать более ценную ОЗУ? Обычно ядро ​​хорошо понимает, что не используется, и которое может безопасно оставаться в swap, чтобы освободить RAM. – thomasrutter 6 July 2012 в 05:37
  • 3
    @neon: Имейте в виду, что мои машины имеют 2 ГБ и 3 ГБ оперативной памяти, соответственно, что в наши дни довольно мало. Свидетельство в исполнении. Например, воссоздание меню или программ переключения может быть медленным из-за замены, также как и эффекты Compos visoal. Эта медлительность вылечивается путем переключения свопа, демонстрируя тем самым, что по крайней мере в некоторых ситуациях алгоритмы оптимизации ядра являются субоптимальными. Я не могу спорить с повторным опытом. – Scott Severance 6 July 2012 в 09:31
  • 4
    Уф !! Это только увеличилось до 0% от обмена. У меня не было много времени, чтобы изучить этот полный вопрос и его ответ, но я любил его читать, когда я получаю свободное время. – AzkerM 12 April 2014 в 15:25
  • 5
    Почему бы вам просто не поставить swappiness на низкое значение? Это, похоже, делает то же, что и ваш сценарий, но гораздо более контролируемым образом. – jhfrontz 9 February 2016 в 19:49

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые работают в течение длительного времени без интенсивных операций, переносятся на swap с помощью linux. Это заставляет несколько затронутых программ работать медленно. Если у вас много свободного места, вы можете отключить своп, выполнив команду: swapoff -av (для этого вам понадобятся права sudo.) Если вам не нравится своп, вы можете включить его , используя симметричную команду: swapon -av (требуется еще sudo).

4
ответ дан 25 May 2018 в 09:11
  • 1
    Поворот смены полностью переполнен, так как swappiness = 0 делает то же самое, но безопаснее (если вы сделаете , в итоге получится слишком много материала в памяти, оно что-то переведет в swap). – Brendan Long 30 June 2012 в 06:33
  • 2
    @BrendanLong Fair point .. Спасибо, что научил меня. :) – drake01 30 June 2012 в 12:26

Как только swap был использован для программы, он имеет тенденцию оставаться отображаемым для жизни программы. Многие программы имеют код (и данные), который редко используется. После того, как память будет заменена, вряд ли она будет заменена.

Один из способов заставить эти страницы в памяти отключить обмен устройство. Если у вас их два, вы можете отключить его, включить его, а затем отключить второй. Если обмен действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить сменное устройство (или файл), но если вам действительно нужно место подкачки, могут произойти резкие вещи.

Помимо нормальных вещей в памяти, tempfs использует пространство подкачки и будет заменяться как остаток памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к потере страниц. Как только созданные временные файлы больше не будут использоваться через пару минут и будут хорошими кандидатами для перемещения на устройство подкачки.

В крайнем случае вы можете использовать файл как своп-устройство. Это полезно, если вам требуется дополнительное пространство подкачки временно.

3
ответ дан 25 May 2018 в 09:11

Я отредактировал сценарий Скотта Северанса, чтобы он соответствовал новым версиям, которые уже содержат полное доступное поле памяти.

#!/bin/bash

free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
2
ответ дан 25 May 2018 в 09:11

Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.

Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.

Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.

В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.

3
ответ дан 25 July 2018 в 18:15

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.

2
ответ дан 25 July 2018 в 18:15

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av (вам потребуются права sudo.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av (снова sudo требуется).

4
ответ дан 25 July 2018 в 18:15

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av (вам потребуются права sudo.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av (снова sudo требуется).

4
ответ дан 31 July 2018 в 10:25

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.

21
ответ дан 31 July 2018 в 10:25

Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.

Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.

Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.

В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.

3
ответ дан 31 July 2018 в 10:25

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av (вам потребуются права sudo.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av (снова sudo требуется).

4
ответ дан 31 July 2018 в 11:28

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже включают поле общей доступной памяти.

#!/bin/bash

free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
21
ответ дан 31 July 2018 в 11:28

Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.

Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.

Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.

В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.

3
ответ дан 31 July 2018 в 11:28

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.

21
ответ дан 2 August 2018 в 00:28

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av (вам потребуются права sudo.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av (снова sudo требуется).

4
ответ дан 2 August 2018 в 00:28

Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.

Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.

Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.

В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.

3
ответ дан 2 August 2018 в 00:28

Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av (вам потребуются права sudo.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av (снова sudo требуется).

4
ответ дан 4 August 2018 в 15:57

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.

21
ответ дан 4 August 2018 в 15:57

Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.

Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.

Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.

В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.

3
ответ дан 4 August 2018 в 15:57

Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже включают поле общей доступной памяти.

#!/bin/bash

free_mem="$(free | grep 'Mem:' | awk '{print $7}')"
used_swap="$(free | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
21
ответ дан 6 August 2018 в 00:35

Другие вопросы по тегам:

Похожие вопросы: