Действительно ли это - плохая идея создать сценарий крона, который освобождает подкачку каждый час?

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

Я сделал короткое cron команда для автоматизации этого, и у меня есть хорошие результаты:

#! /bin/sh

echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab

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

26
задан 7 January 2018 в 07:24

6 ответов

Используя его как этот: да, плохо. Действительно необходимо проверить, существует ли достаточно памяти, доступной, прежде чем Вы выключите подкачку. См. https://askubuntu.com/a/90399/15811 для лучшей версии.

Также: действительно ли Вы уверены в этом? Выделяемая подкачка не означает используемую подкачку. Команда vmstat, столбцы si (загрузите) и so (выгрузить). Если они остаются 0, Вы получили другую проблему. По моему опыту, подкачка едва используется, и Вы не могли бы использовать ее, думая, что она не освобождает его, но нет ничего для освобождения.

51
ответ дан 23 November 2019 в 01:06

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

Если активный процесс продолжает подкачиваться, необходимо фиксировать то, что это, это вызывает давление на память. Если это не активный процесс, каково грандиозное предприятие?

41
ответ дан 23 November 2019 в 01:06

Это - плохая идея.

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

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

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

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

34
ответ дан 23 November 2019 в 01:06

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

У Вас в основном есть два случая:

  • Процессы в области подкачки не используются так или иначе. Почему Вы хотите задержать их в RAM?
  • Существует мало RAM, таким образом, они выгружаются, и Вы задерживаете их в RAM. Затем Ваша система поместит их в подкачку снова как можно скорее.

Таким образом, существует два основных момента:

  1. Во-первых, Ваша система будет медленной, когда будет слишком мало RAM для запущения всех программ сразу. Подкачка поможет Вам запустить больше программ, но не переключиться быстро на редко используемую, которая может быть выгружена. Никакая подкачка не может получить редко используемый уничтоженный или отправить в настоящее время используемому исключение из памяти.
  2. Во-вторых, подкачка является хорошей вещью и так имеет материал в подкачке, поскольку у Вас есть свободная RAM за счет программ, которые Вы в настоящее время не используете так или иначе.

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

Если Вы хотите настроить поведение ядра, посмотрите swappiness параметр.

Два дополнительных ресурса способствуют @peter-cordes:

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

21
ответ дан 23 November 2019 в 01:06

Можно достигнуть тех же результатов путем сообщения ядра свободному кэши:

echo 3 > /proc/sys/vm/drop_caches

Таким образом, Вы избегаете краткого момента возможного исчерпания ресурсов памяти и уезжаете, ядро решают то, что необходимо и что может быть отброшено.

5
ответ дан 23 November 2019 в 01:06

Вопреки общей ПОДКАЧКЕ идеи сам по себе не плохо.
Что на самом деле замедляется, Ваша система является действием ядра, которое перемещает Данные от RAM до ПОДКАЧКИ и назад в RAM, swappiness.
Система делает это автоматически, поскольку она настроена с swappiness.
Это делает ту Память из неактивных процессов, выводится к Разделу Подкачки Жесткого диска.
Я сам работал в течение многих лет с Машиной, которая не имела такого большого количества Оперативной памяти, и у меня всегда была некоторая используемая Память ПОДКАЧКИ. Тем не менее моя машина хорошо работала, непока Вы не начинаете перемещать память назад в RAM, возможно, путем попытки закрыть открытое приложение. Затем Рабочая нагрузка начала увеличиваться.

  • Таким образом путем вычищения постоянно Вы ПОДКАЧИВАЕТЕ Память, которую значительно увеличит Рабочая нагрузка на Вашей машине.
  • Запущенные приложения, которые имеют их Память на Разделе ПОДКАЧКИ, могут повредить в их выполнении.

Скорее я предложил бы, чтобы Вы изучили closly, какое приложение использует Вашу память на командной строке с htop приложение и решает закрыть некоторое Приложение. gnome-system-monitor может дать Вам хорошее понимание также, на его Вкладке Процесса.
Если у Вас есть большие приложения, которые используют много RAM. Не выполняйте их внезапно.

0
ответ дан 23 November 2019 в 01:06

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

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