Кто использует память подкачки и почему?

Мой сервер базы данных использует 191 МБ пространства подкачки, но также показывает 182 МБ свободной оперативной памяти

Коробка представляет собой выделенный сервер MySQL, на котором работает Debian Lenny.

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

4 ответа

Решение

Войти top, затем нажмите f, чтобы редактировать видимые поля, нажмите p, чтобы показать использование подкачки, затем нажмите Enter, чтобы вернуться к отображению программ. Используйте Shift+< и >, чтобы отсортировать по использованию свопа.

Linux выгружает данные из ОЗУ в зависимости от того, насколько вероятно (по личному мнению Linux), что к ним нужно будет обращаться в ближайшее время. Вы можете изменить свою перестановку, чтобы увеличить / уменьшить вероятность этого.

Это не так просто ответить - посмотрите здесь: https://help.ubuntu.com/community/SwapFaq.

Ты можешь использовать top команда, чтобы увидеть использование свопа, введите man top или Google для этого.

Что касается почему - одна из возможных ситуаций заключается в следующем. Скажем, у вас есть 1 ГБ или ОЗУ. Затем вы загружаете приложения объемом 2 ГБ (включая ОС). У вас будет 1 ГБ оперативной памяти и 1 ГБ подкачки. Затем вы выгружаете 1,5 ГБ приложений. Вы могли бы предположить, что у вас было бы 0,5 ГБ ОЗУ свободно и все бесплатно. Тем не менее, это может быть совсем не так. Например, если вы загрузили 3 приложения:

  • A - 1 ГБ,
  • B - 900 МБ
  • C - 100 МБ

затем активно использовал A, вероятно, что и B, и C были бы выгружены на диск, чтобы A использовал RAM и, следовательно, быстро. Когда вы закроете A и переключитесь на C, у вас будет 100 МБ ОЗУ, а B все равно будет выгружен (используется подкачка 900 МБ), так как он не нужен.

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

Просто вопрос об обмене памятью, чтобы поддержать комментарий Эрики к ответу Джеймса:

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

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

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

Оппортунистический обмен может быть устранен с echo 0 > /proc/pid/vm/swappiness,

free -m

Посмотрите на строку +/- буферов для вашего реального оперативного памяти минус буферы файловой системы. Современная ОС загружает часто используемые файлы в память, и ядро ​​освобождает их по мере необходимости.

Например

             total       used       free     shared    buffers     cached
Mem:          3483       1702       1780          0        299        778
-/+ buffers/cache:        623       2859
Swap:         3999          0       3999

Запуск top Я бы увидел, что у меня 1.7 гигабайта свободной памяти, но если я посмотрю на free -m i, то у меня действительно будет 2.8 гигабайта. Другие 1.1 гигабайта - кеш файловой системы.

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