Я думал, что вся суть подкачки заключается в том, чтобы действовать как временная сеть безопасности хранения, когда ОЗУ переполнена, но мой раздел подкачки постоянно используется, хотя иногда у меня есть до 3 ГБ свободной ОЗУ. Это нормально?
Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.
Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.
Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.
В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.
Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько уязвимых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av
(вам потребуются права sudo
.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av
(снова sudo
требуется).
Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.
Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.
Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.
Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.
В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.
Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av
(вам потребуются права sudo
.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av
(снова sudo
требуется).
Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям free, которые уже содержат поле общей доступной памяти.
Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.
Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.
Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.
В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.
Я отредактировал скрипт Скотта Северанса , чтобы он соответствовал более новым версиям 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
Обычно своп остается неиспользуемым в современных системах. По моему опыту, процессы, которые выполняются в течение долгого времени без интенсивных операций, переключаются на Linux подкачки. Это приводит к тому, что несколько затронутых программ работают медленно. Если у вас много оперативной памяти, вы можете отключить обмен, выполнив команду: swapoff -av
(вам потребуются права sudo
.) Если вам не нравится отключение, вы можете включить его с использованием симметричной команды: swapon -av
(снова sudo
требуется).
Как только своп используется для программы, он имеет тенденцию оставаться отображенным на весь срок действия программы. Во многих программах есть код (и данные), который редко используется. Как только память выгружается, ее вряд ли можно заменить.
Один из способов заставить эти страницы войти в память - отключить подкачку. устройство. Если у вас есть два, вы можете выключить один, включить его снова, а затем выключить второй. Если своп действительно нужен, он будет перемещаться между устройствами. Вы можете просто отключить устройство подкачки (или файл), но если вам действительно нужно пространство подкачки, могут произойти и радикальные вещи.
Помимо обычных вещей в памяти, tempfs использует пространство подкачки и будет меняться как Остальная часть памяти. Если вы запускаете что-то, что требует много временного диска, это может привести к замене страниц. Созданные временные файлы больше не могут использоваться через пару минут и являются хорошими кандидатами для переноса на устройство подкачки.
В крайнем случае вы можете использовать файл в качестве устройства подкачки. Это полезно, если вам нужно временно дополнительное пространство подкачки.
Установка значения подкачки не работает в каждой ситуации. Если это работает для вас, отлично. Если нет, я написал скрипт для периодической очистки свопа путем его выключения и повторного включения.
Переключение свопа немного рискованно, если вы не будете осторожны. Если у вас недостаточно свободной оперативной памяти для хранения всего в оперативной памяти плюс всего в разделе подкачки, попытка отключить подкачку приведет к тому, что ваша система перестанет отвечать на запросы. Мой скрипт сначала проверяет, достаточно ли свободной оперативной памяти (что занимает немного времени, так как фактический объем свободной оперативной памяти отличается от того, что 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
). Этот скрипт не оставит вашу систему без ответа; если у вас недостаточно оперативной памяти, он не сможет переключить своп. Я использовал этот скрипт без проблем вот уже пять лет.