Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

free -m

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

Например

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

Запустив верхнюю часть, я бы увидел, что у меня 1,7 ГБ свободной памяти, но если я посмотрю на free -m, я вижу, что у меня действительно есть 2,8 ГБ свободной. Другой 1,1 гигабайт - это кеш файловой системы.

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

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

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

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

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

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