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

Вместо того, чтобы использовать lsof для проверки через файловую систему просто используйте общий список открытых файлов и grep это. Я нахожу, что это возвращается, должен быстрее, хотя это менее точно. Это должно сделать задание.

lsof | grep '/path'
129
10.09.2014, 22:48
9 ответов

Нормально для систем Linux использовать некоторую подкачку, даже если существует все еще свободная RAM. Ядро Linux переместится для свопинга страниц памяти, которые очень редко используются (например, getty экземпляры, когда Вы только используете X11 и некоторого другого неактивного демона).

Использование области подкачки становится проблемой только, когда существует недостаточно доступной RAM, и ядро вынуждено непрерывно переместить страницы памяти, чтобы подкачать и отступить к RAM, только поддерживать приложения в рабочем состоянии. В этом случае приложения системного монитора показали бы много диска действие ввода-вывода.

Для сравнения моя система Ubuntu 10.04, с двумя пользователями вошла в систему с сессиями X11 и рабочий рабочий стол GNOME, ~600MB использования подкачки и ~1GB RAM (не считающий буферы и кэш фс), таким образом, я сказал бы, что Ваши фигуры для использования подкачки выглядят нормальными.

93
27.01.2020, 19:29
  • 1
    Путем выгрузки неактивных программ у Вас есть больше памяти для кэширования файлов. И это ускоряет вещи. –  jmanning2k 07.10.2010, 20:39

Это поведение может быть настроено путем устанавливания значения:

/proc/sys/vm/swappiness

Значение по умолчанию равняется 60. Установка ее к 0 средствам никогда не использовать подкачку, когда существует все еще оставленная RAM и 100, выгружает память как можно скорее.

Изменить значение временно (потерянный на перезагрузке):

sudo sysctl vm.swappiness=10

Для изменения значения постоянно отредактируйте файл:

/etc/sysctl.conf

как корень (например. sudo nano /etc/sysctl.conf) и измените или добавьте (если не там) строку:

vm.swappiness

к требуемому значению. Если этот файл не существует (например, в Дуге Linux), то попробуйте /etc/sysctl.d/99-sysctl.conf вместо этого.

Были некоторые дебаты по тому, хороша ли выгрузка с доступной свободной памятью или плоха, но справка Ubuntu действительно рекомендует значение 10 для Настольных систем. См. также это учебное руководство на Цифровом Океане для CentOS.

93
27.01.2020, 19:29
  • 1
    Обратите внимание, что сокращение swappiness не обязательно означает увеличение скорости отклика или производительность. Я видел сообщения об увеличении swappiness переводящий в лучшую производительность. Не верьте ничему, что Вы читаете, что не включает сравнительные тесты и проверяют, что сравнительные тесты используют рабочую нагрузку, подобную Вашему. f-пятно –  Gilles 'SO- stop being evil' 04.10.2010, 02:05
  • 2
    Это сохраняется через перезагрузку? Я думал, что/proc был повторно создан каждая начальная загрузка. –  HandyGandy 05.10.2010, 05:10
  • 3
    @HandyGandy: Я добавил информацию к ответу, как изменить его постоянно. –  Marcel Stimberg 05.10.2010, 09:56
  • 4
    @HandyGandy: чтобы быть педантичным,/proc не повторно создан на каждой начальной загрузке, а скорее proc является виртуальной файловой системой, таким образом, это только "сгенерировано" при доступе к ним. Это не существует на диске вообще. –  Lie Ryan 13.04.2018, 02:56

Linux начинает подкачивать, прежде чем RAM заполнена. Это сделано для улучшения производительности и скорости отклика:

  • Производительность увеличена, потому что иногда RAM лучше используется для дискового кэша, чем сохранить память программ. Таким образом, лучше выгрузить программу, это было неактивно некоторое время и вместо этого сохраняет часто используемые файлы в кэше.

  • Скорость отклика улучшена путем выгрузки страниц, когда система неактивна, скорее чем, когда память полна, и некоторая программа выполняет и запрашивает больше RAM выполнить задачу.

Свопинг действительно замедляет систему, конечно —, но альтернатива свопингу не не подкачивает, это имеет больше RAM или использует меньше RAM.

46
27.01.2020, 19:29
  • 1
    Так, в некотором смысле подкачка является упаковывать мерой? Это и быть в спящем режиме вещь? –  tshepang 13.01.2011, 13:58
  • 2
    @Tshepang: Имение достаточной подкачки для установки виртуальной памяти не состоит в том “в случае, если”, это необходимо (иначе программы откажут из-за отсутствия памяти). –  Gilles 'SO- stop being evil' 13.01.2011, 21:14
  • 3
    @Tschepang: уничтожитель OOM является причиной, которую они разрушают. (Технически Вы могли обойтись без уничтожителя OOM и просто не смочь выделить что-либо, но это будет иметь хороший шанс запирания системы; уничтожитель OOM делает его немного более вероятно, чтобы администратор смог войти в систему и чтобы важные процессы продолжали бежать.) –  Gilles 'SO- stop being evil' 13.01.2011, 21:21
  • 4
    я понимаю Вашу точку "выгрузка страниц, когда система неактивна, скорее чем, когда память полна", но парень едва использует 15% ее RAM. Далекий от почти полного, не так ли? Хотя предыдущий свопинг, вызванный полной RAM, возможно, оставил эту ситуацию... –  Totor 22.03.2013, 01:43
  • 5
    "Linux начинает подкачивать, прежде чем RAM заполнена" когда? точно –  Yousha Aleayoub 14.10.2017, 15:22

Наличие более доступной памяти

Как все сказал, да, подкачка поможет Вам избавиться от неиспользованной памяти, таким образом, она сможет помочь Вам имеющий больше памяти в наличии.

Спящий режим

Но подкачка может также использоваться для спящего режима, который может быть действительно полезным, когда Вы имеете ноутбук или хотите сохранить энергию и поместить Ваш компьютер и работу в спящем режиме перед оставлением работы. Таким образом, у Вас может быть более быстрый запуск утро после.

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

Недостатки

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

Используя зашифрованную подкачку со спящим режимом не работает out-of-the-box со всеми дистрибутивами. Необходимо использовать постоянный ключ шифрования (некоторые установки случайным образом генерируют ключ шифрования области подкачки при каждой начальной загрузке), и initrd/initramfs для активации зашифрованного тома перед возобновлением.

5
27.01.2020, 19:29

Много современных программ основано на чрезмерно увеличенных в размерах платформах, которые притягивают много спама, в котором Вы на самом деле не нуждаетесь для запущения программы. Выгрузка тех неиспользованных страниц освобождает RAM для кэша и программ, которые могут на самом деле использовать RAM.

Я говорю от болезненного личного опыта здесь.

В прошлом году я переключил один из своих веб-сайтов к многообещающей новой платформе веб-сервера, которая была создана сверху Firefox. Может звучать странным создать систему серверной стороны сверху сфокусированной клиентами программы как Firefox, но это обладало некоторыми огромными преимуществами. Firefox очень мощен, предлагает некоторые действительно впечатляющие внутренние услуги, и он уменьшает несоответствие импеданса между сервером и клиентом, чтобы иметь обе рабочих подобных платформы.

Но существует оборотная сторона: Firefox является большим. Действительно большой. Это было видом версии 1.x проекта, таким образом, они не нашли время для вещей как удаление поддержки GUI. [*] Моему сайту не было нужно ни одно из этого, но потому что технология VPS, которую мой используемый поставщик услуг хостинга не позволил области подкачки, которую код GUI и все другие части Firefox я не использовал, съела реальную RAM. Я закончил тем, что нуждался в минимуме RAM на 512 МБ только для выполнения сайта без него отказывающий из-за исчерпания памяти. Если мой VPS имел некоторую область подкачки, я, вероятно, возможно, обошелся планом на 256 МБ.

[*] Удаление кода GUI от платформы даже не могло быть желательным, так как одно из преимуществ этой платформы было высокочастотной веб-очисткой, потому что серверная платформа могла загрузить веб-страницы с другого сайта, и Вы могли управлять ими так же, как Вы будете на стороне клиента. Думайте мэшапы. Много такой вещи повредилось бы, если Вы не можете "представить" веб-страницу в некотором графическом контексте.

Между прочим, эта веб-платформа чрезвычайно мертва теперь, таким образом, нет никакого смысла называть-и-позорить она. Лучше всего просто принимать более широкий урок близко к сердцу: да, подкачка все еще полезна, даже если у Вас есть концерты свободной RAM.

3
27.01.2020, 19:29

От Подкачки Ubuntu F.A.Q., что Marcel, связанный с

Как основной минимум, настоятельно рекомендовано, что область подкачки должна быть равной на сумму физической памяти (RAM). Кроме того, рекомендуется, чтобы область подкачки была дважды суммой физической памяти (RAM) в зависимости от суммы жесткого диска

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

3
27.01.2020, 19:29
  • 1
    я все еще нахожу это невероятным. Почему мне должны быть нужны 8 ГБ подкачки для моих 4 ГБ, никогда бывшей в спящем режиме системы? Мне действительно нужны 128 ГБ подкачки для моих 64 ГБ, вычисляют узел? Я обычно выделяю не больше, чем 1 ГБ для подкачки, если нет высоко определенная причина. А-ч –  David Mackintosh 04.10.2010, 21:45
  • 2
    Это оставляет больше пространства для кэширования slow-as-all-heck жесткого диска во время молнии быстрая RAM. (Плюс, некоторые схемы спящего режима сохраняют копию RAM в область подкачки) –  Arafangion 05.10.2010, 16:36
  • 3
    @David, @Jader: число swap=2*ram является старой историей, которая выжила много позже того, как исходное выравнивание стало не важным — теперь, люди пытаются найти способ выровнять по ширине это число вместо предложения соответствующего числа для их системы. Посмотрите, почему мы должны установить область подкачки, так же дважды большую как наша физическая память?. –  Gilles 'SO- stop being evil' 12.11.2010, 15:05
  • 4
    @Gilles, который я продолжаю работать со своим положением, потому что я видел однажды авторитетная статья об этом предмете, который противоречит набору экспертов, которых я не знаю, как глубоко их знание. –  Jader Dias 13.11.2010, 03:47
  • 5
    Если можно помнить ссылку, совместно используйте. спасибо –  Gilles 'SO- stop being evil' 13.11.2010, 12:46

Я думаю, что "Gilles" уже упомянул то, что, в то время как у Вас может быть более чем достаточно RAM, подкачка может быть полезной во время определенных "недостатков", а также постоянно сохраняющий некоторые данные даже после завершений работы - или является мной неправильно в принятии этого? (так как RAM спугивают после перезагрузок) я имею 12 ГБ в наличии RAM в моей системе, и я также обдумал об этом вопросе прежде. Однажды, когда я отключил всю подкачку и только полагался на мою RAM, у меня были крайне трудные события при попытке отладить некоторую системную ошибку или катастрофический отказ, и т.д. после завершений работы системы. С тех пор я повторно включил раздел подкачки.

2
27.01.2020, 19:29

Это старый пост, однако я все же позволю себе изложить здесь свои мысли.

Начиная снизу, Linux сначала делит память на страницы (обычно по 4 КБ на страницу в системе x86_64). После этого создается виртуальная память, отображение которой выполняется с физической памятью с помощью MMU (Memory Management Unit).

Процессам выделяется память из области виртуальной памяти, поэтому обратите внимание: когда вы видите / proc / meminfo, вы увидите VMalloc * в качестве сведений о виртуальной памяти.

Допустим, у вас есть процесс, который запрашивает память (скажем, 300 МБ - веб-браузер). Для процесса будет выделено 300 МБ из виртуальной памяти, однако нет необходимости, чтобы она отображалась в памяти (которая отображается в физическую память). Существует концепция «Копировать при записи» для управления памятью, согласно которой, если ваши процессы действительно используют память, выделенную из виртуальной памяти (то есть они делают некоторую запись в память), только тогда она отображается в физическую память. Это помогает ядру эффективно работать должным образом в многопроцессорной среде.

Что такое кеш?

Большой объем памяти, используемый процессами, является совместно используемым.Допустим, библиотека glibc используется почти всеми процессами. В чем смысл хранения нескольких копий glibc в памяти, когда каждый процесс может обращаться к одной и той же области памяти и выполнять свою работу. Такие часто используемые ресурсы хранятся в кеше, чтобы при запросе процессов они могли ссылаться на одну и ту же ячейку памяти. Это помогает ускорить процессы , поскольку повторное и повторное чтение glibc (и т. Д.) С диска потребует много времени.

Вышесказанное относится, скажем, к разделяемым библиотекам, то же самое верно и для чтения файлов. Если вы впервые читаете большой файл (скажем, 100-200 МБ), это займет много времени. Однако, если вы попытаетесь повторить то же самое чтение еще раз, это будет быстрее. Данные были кэшированы в памяти, и повторное считывание производилось не для всех блоков.

Что такое буфер?

Что касается буфера, когда процесс выполняет файловый ввод-вывод, он полагается на буфер ядра для записи данных на диск. Процессы запрашивают ядро ​​для выполнения работы. Итак, от имени процесса ядро ​​записывает данные в свой «буфер» и сообщает процессу, что запись выполнена. В асинхронном режиме ядро ​​будет синхронизировать эти данные в буфере с диском. Таким образом, процессы полагаются на то, что ядро ​​выберет правильное время для синхронизации данных с диском, и процессы могут продолжить работу. Помните, что это обычный ввод-вывод, выполняемый обычными процессами. Однако специализированные процессы, которым необходимо подтвердить, что ввод-вывод действительно выполняется на диске, могут использовать другой механизм для выполнения ввода-вывода на диске. Некоторые из утилит с открытым исходным кодом - libaio.Кроме того, есть способы вызвать явную синхронизацию с FD, открытыми в контексте вашего процесса, чтобы вы заставляли ядро ​​ синхронизировать данные с диском для той записи, которую вы, возможно, сделали.

В чем же тогда заключаются ошибки страниц?

Рассмотрим пример, когда вы запускаете процесс (скажем, веб-браузер), размер двоичного файла которого составляет около 300 МБ. Однако полные 300 МБ двоичного файла веб-браузера не начинают работать мгновенно. Процесс продолжает переходить от функций к функциям в своем коде. Как было сказано ранее, виртуальная память будет потребляться 300 МБ , однако не вся память отображается на физическую (резидентная память RSS будет меньше, см. Верхний вывод). Когда выполнение кода достигает точки, для которой память фактически не отображается, возникает ошибка страницы . Ядро будет отображать эту память на физическую, связывать страницу памяти с вашим процессом. Такая ошибка страницы называется "Minor Page Faults". Точно так же, когда процесс выполняет файловый ввод-вывод, возникают серьезные ошибки страницы.

Когда и почему происходит Swap Out?

Ситуация 1:

В соответствии с приведенными выше подробностями, давайте рассмотрим сценарий, когда достаточный объем памяти становится отображаемым в память. И теперь запускается процесс , которому требуется память. Как обсуждалось выше, ядру потребуется выполнить некоторую привязку к памяти. Однако для отображения памяти недостаточно физической оперативной памяти . Теперь ядро ​​сначала заглянет в кеш, у него будут старые страницы памяти, которые не используются. Оно сбросит эти страницы в отдельный раздел (называемый SWAP), освободит некоторые страницы и отобразит освободили страницы для приходящего нового запроса. Поскольку запись на диск происходит намного медленнее, чем в твердотельном ОЗУ, этот процесс занимает много времени, и, следовательно, наблюдается замедление.

Ситуация 2:

Допустим, вы видите много свободной памяти, доступной в системе. Даже тогда вы видите, что происходит много подмен.Возможная проблема - фрагментация памяти. Рассмотрим процесс, которому от ядра требуется 50 МБ непрерывной памяти. (имейте в виду смежные). Очевидно, что ядро ​​произвольно выделило бы страниц для разных процессов и освободило бы некоторые из них. Однако, когда нам требуется непрерывная память, ей придется искать фрагмент , который удовлетворяет потребности процессов. Если он не может получить такую ​​память, ему придется выполнить подкачку некоторых старых страниц памяти, а затем выделить смежных. Даже в таких случаях SWAP произойдет. Начиная с версии ядра 2.6 и выше, такие проблемы фрагментации значительно уменьшились. Однако, если система работает в течение длительного времени, такие проблемы все равно могут возникнуть.

См. Этот пример ( вывод vmstat )

2016-10-29 03:55:32 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
2016-10-29 03:55:32  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
2016-10-30 03:56:04 19 23 2914752 4692144 3344908 12162628 1660    1  8803 12701 4336 37487 14  7 40 38  0
2016-10-30 03:56:34  3 20 2889296 4977580 3345316 12026752 2109    2  8445 14665 4656 36294 12  7 46 34  0
2016-10-30 03:57:04  1 11 3418868 4939716 3347804 11536356  586 4744  2547  9535 3086 24450  6  3 59 33  0  <<<-----
2016-10-30 03:57:34  3 19 3456252 5449884 3348400 11489728 3291 13371  6407 17957 2997 22556  6  4 66 24  0
2016-10-30 03:58:04  7  6 4194500 5663580 3349552 10857424 2407 12240  3824 14560 2295 18237  4  2 65 29  0
2016-10-30 03:58:34  2 16 4203036 5986864 3348908 10838492 4601 16639  7219 18808 2575 21563  6  4 60 31  0
2016-10-30 03:59:04  3 14 4205652 6059196 3348760 10821448 6624 1597  9431  4357 1750 20471  6  2 60 31  0
2016-10-30 03:59:34  2 24 4206968 6053160 3348876 10777216 5221 2067 10106  7377 1731 19161  3  3 62 32  0
2016-10-30 04:00:04  0 13 4205172 6005084 3348932 10785896 6236 1609 10330  6264 1739 20348  4  2 67 26  0
2016-10-30 04:00:34  4 11 4206420 5996396 3348976 10770220 6554 1253 10382  4896 1964 42981 10  5 58 27  0
2016-10-30 04:01:04  6  4 4177176 5878852 3348988 10825840 8682  765 10126  2716 1731 32949  8  4 69 19  0

@ 2016-10-30 03:57:04, мы видим, что все еще доступно достаточное количество свободной оперативной памяти. Однако даже тогда своп произошел. Мы проверили дерево процессов на этом этапе и не обнаружили ни одного процесса, который требовал бы такого большого количества памяти (больше, чем свободная память). Очевидным подозрением является описанная выше Ситуация 2. Мы проверили журналы buddyinfo и zoneinfo выше (используйте echo m> / proc / sysrq-trigger, чтобы проверить их, вывод попадает в системные журналы).

Для нашей нормальной системы сравнение информации о зоне происходит так. И графики для кеша / свободной / низкой памяти также упомянуты ниже

zone info

swap free low free

Глядя на информацию, становится ясно, что там - это фрагментация памяти в узле 0 и узле 1 нормально (узел - это машина на основе NUMA, следовательно, несколько узлов (см. numactl, чтобы проверить информацию для вашей системы)).

Фрагментация памяти также является причиной увеличения использования подкачки даже при наличии свободной памяти.

13
27.01.2020, 19:29

Рекомендация о том, что пространство подкачки должно в два раза превышать объем физической памяти (ОЗУ ), больше не обновляется https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/ch-swapspace#tb-recommended-system-swap-space, но верна только для небольшого объема памяти в системе.

-3
30.12.2020, 09:10

Теги

Похожие вопросы