Кто использует память подкачки и почему?
Мой сервер базы данных использует 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. Насколько я понимаю, если процесс затем решит использовать эти данные до того, как они будут восстановлены, его не нужно будет обменивать снова. Обмен, как правило, хорош, но есть две основные причины, по которым вы можете этого не хотеть:
- Вы пытаетесь сберечь энергию: активное переключение, как правило, увеличивает объем вращения диска, поскольку некоторая необходимость замены не потребуется;
- Перестановка может улучшить быстроту процесса, производительность которого вас не интересует, за счет процесса, задержка которого является проблемой.
Оппортунистический обмен может быть устранен с 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 гигабайта - кеш файловой системы.