Что такое подкачка памяти?

26

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

Сегодня я узнал, что мои процессы используют память подкачки. Теперь, что такое подкачка памяти и как я могу определить, какой процесс использует память подкачки, и как я могу остановить их использование?

+030
источник
нет ли способа узнать, какие процессы используют подкачку памяти ???
посмотрите в диспетчере задач Windows (или подобных инструментах) количество использованных файлов страниц и количество ошибок страниц.
Своп не для каждого процесса, а для всей ОС. «vmstat» покажет вам информацию о том, сколько вы используете своп.
jrockway
я работаю на Linux, а не на Wimdows
получил причину такого использования свопа ..... кто-то пытался разобрать мой сайт, поэтому все это происходило без каких-либо причин с нашей стороны. Спасибо всем за ваши ответы, это мне очень помогло как всегда :-)

Ответы:

41

Если у вас заканчивается физическая память, вы используете виртуальную память, которая хранит данные в памяти на диске. Чтение с диска на несколько порядков медленнее, чем чтение из памяти, поэтому все замедляется. (Обмен данными между реальной памятью и виртуальной памятью является «обменом». Пространство на диске - это «пространство подкачки».)

Если ваше приложение «использует обмен», то вам нужно либо использовать меньше памяти, либо покупать больше оперативной памяти.

(Поменять местами полезно, поскольку неиспользуемые приложения могут храниться на диске до тех пор, пока они не будут использованы. Затем их можно «выгружать» и снова запускать в обычном режиме. Однако, пока он не находится в памяти, ОС может использовать эту память для чего-то другого, например кеша диска. Так что это очень полезная функция, но если у вас недостаточно физической памяти для запуска вашей программы, вам определенно нужно больше памяти. К счастью, в наши дни память действительно очень дешевая.)

jrockway
источник
1
Ради правильности: виртуальная память означает использование адресов виртуальной памяти (то, что всегда включено в современном ЦП, независимо от того, сколько у вас доступно ОЗУ) и не имеет прямого отношения к обмену (хотя они используются в комбинации, они принципиально разные понятия).
Фортран
@fortran, для двойной корректности, виртуальная память - это термин, который Windows использует, когда ссылается на файл подкачки (swap) .
sleblanc
7

Компьютер имеет определенное количество физической памяти. Но большую часть времени мы хотим большего. Итак, мы поменяем память на диске.

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

В окнах, если вы посмотрите на диспетчер задач, вы можете показать ошибки на странице столбца. Это показывает количество времени, в течение которого приложение запрашивает часть памяти, которая была на диске и должна быть заменена. Много ошибок страницы = медленное приложение.

Этот процесс используется на нескольких уровнях. Сводка от быстрой до медленной:

  • На уровне процессора есть регистры. Это самая быстрая память, но количество ограничено.
  • Также на процессоре есть небольшой кеш памяти. Здесь небольшой фрагмент запущенной программы хранится для быстрого доступа. Поиск по алгоритмам прогнозирования отрасли, если вы хотите узнать больше.
  • Иногда между процессором и основной памятью существуют кэши 2-го уровня.
  • Следующий уровень - это основная память (RAM).
  • Последний уровень и самый медленный из всех - это диск, иногда вы можете использовать флешки в качестве дополнительной памяти.
Тун Крижте
источник
3
cat /proc/pid/smaps

Если вы не хотите использовать swap, то не используйте раздел подкачки (закомментируйте строку в нем /etc/fstab), но это помешает запустить новый процесс и приведет к сбою malloc, если у вас закончится физическая память. В общем, это не очень хорошая идея ... не очень безопасная и даже не очень полезная, поскольку ОС будет хранить горячие страницы в памяти и заменять те, которые в последнее время не использовались, на диск.

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

Чтобы узнать, что такое подкачка и как работает виртуальная память ... Я бы порекомендовал вам взглянуть на некоторые лекции по операционной системе, может быть, MIT Open Courseware может помочь.

Фортран
источник
Поскольку настройка по умолчанию во многих дистрибутивах Linux заключается в чрезмерной загрузке памяти, «наихудшим» случится то, что OOM killer начнет выполнять процессы снайпинга, скорее всего, начиная с СУБД (и таблиц, «хранящихся в ОЗУ», что, вероятно, не очень хорошо). вещь).
Symcbean
1

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

ОБНОВИТЬ

Чтобы узнать, где находится пространство подкачки (или виртуальная память), вы можете перейти к диспетчеру задач (CTRL + ALT + DEL) и включить из меню ПРОСМОТР -> КОЛОННЫ -> ВИРТУАЛЬНАЯ ПАМЯТЬ. Теперь просто посчитайте разницу между использованием памяти и виртуальной памятью. Также есть инструкция, как это увидеть, если вы работаете в Vista: http://www.ehow.com/how_5067693_increase-swap-space.html

Фая
источник
-1

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

Чтобы запретить процессам использовать swap - установите больше оперативной памяти.

Quentin
источник
1
Если вы не хотите менять местами, прекратите использовать файл подкачки. Но ожидайте других проблем.
1
Это не. Обмен - это перемещение блока данных с жесткого диска в физическую память. Однократное чтение, которое обычно достаточно быстро.
@xtofl в ответе не упоминалось об обмене, просто перестановка разделов, и комментарий gamecat не имел никакого отношения к тому, что вы сказали? : P
RapidWebs
-1

Если вы не хотите, чтобы ваши процессы использовали swap-memory, просто полностью отключите swap-память. К сожалению, если вам когда-нибудь не хватит памяти, ядро ​​Linux убьет некоторые из ваших запущенных процессов, чтобы освободить часть памяти для использования.

Если у вас достаточно оперативной памяти для вашей системы, вы можете обойтись без подкачки памяти.

У меня есть ноутбук с 768 МБ оперативной памяти, который не использует подкачки памяти. Это достаточно хорошо для моих нужд. У меня есть сервер с 256 МБ оперативной памяти и не использует память подкачки. Он работает на 8 виртуальных серверах, используя виртуализацию OpenVZ, также без проблем.

Таким образом, это зависит от вас, если вам нужна своп-память.

sybreon
источник
КАК вы работаете с 8 виртуальными машинами на машине с 256 МБ ОЗУ?!?
Уоррен
Это возможно с VZ, потому что ОЗУ не разделено полностью, так как общие библиотеки совместно используются виртуальными машинами, или что-то подобное. Итак, 8 x 64M не обязательно 512M. :)
sybreon
тем не менее - как стабильно работает базовое устройство?
Уоррен
Выключая неактивные программы, вы получаете больше памяти для кэширования файлов. И это ускоряет ход вещей. это одноразовое чтение, как правило, довольно быстрое и имеет незначительный эффект в целом. он используется не только когда вы выходите за пределы доступной оперативной памяти. Я видел машины с 16 ГБ ОЗУ, которые время от времени использовали SWAP.
RapidWebs
более того, я бы не рекомендовал отключать SWAP на сервере базы данных. Его клиенты или веб-приложение не будут очень довольны, когда OOM убивает серверную часть всего за одну ночь, или что-то подобное? было бы разумнее настроить кэш базы данных в зависимости от использования приложения и доступной памяти. если он уже поменяется местами, ему нужно либо больше оперативной памяти, либо лучше настроить свой сервер БД. в противном случае отключение SWAP приведет к тому, что OOM будет убивать сервер БД каждый раз, когда будет происходить своп. который, судя по его вопросу, часто бывает.
RapidWebs