Поиск по сайту:

Как настроить виртуальную память (файл подкачки) на VPS


Содержание и предисловие

  1. Введение. Требования и причины
  2. Плюсы и минусы — капелька
  3. Проверьте, включено ли это на вашем VPS
  4. Поменять местами разделы, файлы и образы дисков
  5. Создание файла подкачки
  6. Включение и отключение обмена
  7. Конфигурация, приоритет и настройки sysctl
  8. Заключение

Предисловие

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

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

Цитата из статьи о подкачке (файл подкачки) в Википедии: (выделение второго абзаца для его ясного объяснения)

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

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

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

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

<а имя=\1\>

Введение. Требования и почему

Что это такое и зачем мне его использовать?

Независимо от того, есть ли у вас дроплет на 512 МБ или 8 ГБ; Arch, Fedora, CentOS, Debian или Ubuntu; приложениям или серверам/демонам может потребоваться больше памяти (или иногда больше выделенной памяти), чем у вас есть физически. Точнее, в нашем случае, то, что было выделено виртуальному серверу для выполнения работы.

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

Из-за этого я лично рекомендую всем, практически в любой системе — будь то дроплет, выделенный сервер, ваш ПК с Windows или Mac или даже планшет или телефон Android — должен быть включен хотя бы небольшой объем виртуальной памяти.

Как это работает

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

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

Хотя содержание этой статьи может показаться тривиальным для опытных администраторов, я считаю, что это ценная информация для всех, кто использует услуги хостинга DigitalOceans, особенно для новичков в DigitalOcean, системах VPS в целом или для управления своими собственными серверами.

Требования

Требования довольно просты, и этот метод должен работать на всех дистрибутивах и типах дроплетов — на самом деле, он будет работать даже на вашем телефоне или планшете Android (если у вас установлены root и busybox).

  • дроплет или виртуальный сервер, включенный (или выделенный сервер, система на базе Linux и т. д.)
  • доступ к корневому терминалу (ssh, vnc, локальный)
  • команды free, swapon, swapoff, dd, mkswap можно использовать, и все они должны быть доступны на любой платформе, которую вы используете с каплей.

Большинство платформ автоматически используют и управляют виртуальной памятью и автоматически создают либо специальный раздел подкачки, либо файл в системном разделе во время установки, причем размер обычно зависит от доступной системной оперативной памяти или кратен ей, например. своп 1024мб на 512мб ОЗУ.

Это не всегда так с виртуальными серверами, включая дроплеты DigialOceans.

<а имя=\2\>

Плюсы и минусы - Капля

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

Хотя это никогда не было хорошей идеей — особенно с веб-серверами, почтовыми серверами и серверами баз данных — сильно полагаться на виртуальную память, SSD-накопители DO помогают сделать использование виртуальной памяти менее болезненным и более логичным.

Плюсы

  • Защита от ошибок OOM (недостаточно памяти), сбоев, непредсказуемости/нестабильности системы, связанных с памятью.
  • Увеличивает доступную для системы память и позволяет запускать больше программ одновременно и более безопасно
  • Твердотельный накопитель DigtalOceans сокращает задержку и перегрузку, связанные с ВМ, и увеличивает время отклика на пейджинг.

Минусы

  • Возможна перегрузка: когда система занята и активно использует в среднем больше памяти, чем доступно физически, система виртуальной машины вынуждена постоянно обмениваться программными данными на диск и с диска, а также в ОЗУ и из ОЗУ по мере необходимости. Мы, вероятно, все видели результат этого на ПК с Windows, слегка перегруженном жестким диском, который, казалось бы, бесконечно работает. Это невыносимо медленно и не весело. Однако этого можно избежать при правильной настройке, и это один из недостатков, который здесь не так уж плох — опять же из-за скорости твердотельных накопителей DigitalOceans.
  • Использует дисковое пространство, обычно в зависимости от системной памяти. Если ваш дроплет имеет 512 МБ, я рекомендую использовать 512 МБ-1,5 ГБ для подкачки; однако это на 512-1,5 ГБ меньше места, которое у вас будет на диске дроплетов.
  • Обычно рекомендуется и предпочтительно использовать выделенный раздел диска для подкачки; однако это невозможно в дроплете, и вместо этого мы должны использовать файл подкачки/образ диска.

<а имя=\3\>

Проверьте, включено ли на вашем VPS

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

Откройте терминал или SSH/VNC на своем сервере — все эти команды выполняются в терминале или оболочке.

Не забывайте, что для внесения изменений вам нужно быть пользователем root. Вы можете проверить, под каким пользователем вы вошли в систему, с помощью команды whoami. Если он не отвечает root или 0, вы можете ввести su, чтобы запустить корневую оболочку.

Вы можете проверить, включена ли в вашей капле виртуальная память, введя команду «free» в командной строке терминала:

bash-root@my.droplet:/# free

Команда «свободно» показывает доступную физическую и виртуальную память вашим системам.

Если у вас уже включена виртуальная память, вы можете перейти к разделу «Примечание о разделах подкачки», а затем к разделу конфигурации. При включении вывод будет выглядеть так:

bash-root@my.droplet:/# free
             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       1988      54376
-/+ buffers/cache:     304028      57968
Swap:       249896          0     249896
bash-root@my.droplet:/# _

Если он не включен, вывод будет выглядеть так:

bash-root@my.droplet:/# free
             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       2320      54444
-/+ buffers/cache:     303628      58368
Swap:            0          0          0
bash-root@my.droplet:/# _
<p>You can also narrow down the output with <code>free | grep Swap</code>. This will only show the <b>Swap:</b> line, total, used and free VM. (Remember, by default, grep is case sensitive!)</p>
bash-root@my.droplet:/# free | grep Swap
Swap:       249896          0     249896
bash-root@my.droplet:/# _

<а имя=\4\>

Обмен разделами, обмен файлами и образами дисков

Примечание о разделах подкачки

Как правило, для систем на базе Linux предпочтительно иметь на жестком диске выделенный раздел подкачки. Большинство систем сделают это автоматически во время обычной установки, и если ваш своп уже настроен, вполне возможно, что он настроен с разделом. К сожалению, кроме настройки приведенных ниже параметров sysctl, изменение размера разделов подкачки выходит за рамки этой статьи.

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

Что такое файл подкачки?

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

Что такое образ диска?

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

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

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

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

<а имя=\5\>

Создание файла подкачки

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

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

Вы можете использовать команду df -h для просмотра смонтированных разделов и файловых систем, а также их размеров и свободного места.

Я рекомендую поместить этот файл в /var и назвать его \swap.img\. Мы перейдем в /var и создадим этот файл, а затем установим для него права доступа 600.

ПРИМЕЧАНИЕ. В целях безопасности важно установить права доступа к файлу равными 600, чтобы другие пользователи не могли напрямую читать файл, в противном случае системная память может быть прочитана или еще хуже.

bash-root@my.droplet:/# cd /var
bash-root@my.droplet:/var# touch swap.img
bash-root@my.droplet:/var# chmod 600 swap.img
bash-root@my.droplet:/var# _

Размеры

Теперь мы изменим размер файла. Размер важен, и лучший размер зависит от вашей системы и варианта использования.

В общем, я рекомендую 1-2x доступную системную оперативную память. Итак, если у вас есть дроплет на 512 МБ, используйте своп 512 МБ-1 ГБ. Если у вас есть дроплет на 1 ГБ, используйте своп 1 ГБ на 2 ГБ и т. Д.

Это полностью зависит от вашего использования, но эти инструкции предназначены для дроплета 512 МБ. Мы будем использовать команду dd, чтобы заполнить наш файл подкачки нулями или ничем, чтобы растянуть его до нужного нам размера. В данном случае мы используем 1 ГБ или 1024 МБ. Это может занять минуту.

bash-root@my.droplet:/var# dd if=/dev/zero of=/var/swap.img bs=1024k count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.0868896 s, 253 MB/s
bash-root@my.droplet:/var# _

Подготовка образа диска

И здесь мы инициализируем файловую систему подкачки.

bash-root@my.droplet:/var# mkswap /var/swap.img
Setting up swapspace version 1, size = 1020 GiB
no label, UUID=72761533-8xbe-436l-b07e-c0sabe9cedf3
bash-root@my.droplet:/var# _

Как только это будет сделано, он готов к использованию!

<а имя=\6\>

Включение и отключение подкачки

Включите файл подкачки

Мы будем использовать swapon, чтобы включить его. В случае успеха вывода не будет, но вы можете проверить с помощью free.

bash-root@my.droplet:/var# swapon /var/swap.img
bash-root@my.droplet:/var# free
             total       used       free     shared    buffers     cached
Mem:        503596     478928      24668          0      38832     102384
-/+ buffers/cache:     337712     165884
Swap:      1048572       1780    1046792
bash-root@my.droplet:/var# _

Вы можете использовать swapoff /var/swap.img, чтобы отключить его.

Включить файл подкачки во время загрузки

Обратите внимание, что swapon включает файл только для текущей загрузки; если вы перезагрузите компьютер, он не вернется в сеть, если вы не запрограммируете свой swapon для запуска при загрузке или не измените свой /etc/fstab, что в большинстве случаев намного проще и метод, который мы будем использовать здесь.

Все, что вам нужно сделать, это добавить строку в ваш файл /etc/fstab, чтобы он был готов к загрузке. Будь осторожен! Этот файл может сломать вашу систему, если он неправильно отформатирован или перезаписан. Если вы поместите свой swap.img в /var, вы можете без проблем скопировать/вставить приведенную ниже команду. (Если вы наберете его, убедитесь, что есть два символа >, использование одного приведет к перезаписи файла вместо добавления строки в конце.

bash-root@my.droplet:/var# echo "/var/swap.img    none    swap    sw    0    0" >> /etc/fstab
bash-root@my.droplet:/var# _

<а имя=\7\>

Конфигурация, приоритет и настройки sysctl

Конфигурация

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

Приоритеты

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

Система будет использовать области подкачки с более высоким приоритетом перед использованием областей подкачки с более низким приоритетом. swao -p Пример:

bash-root@my.droplet:/var# swapon -p 100 /var/swap.img
bash-root@my.droplet:/var# swapon -p 10 /mnt/SecondDrive/swap.img

А для /etc/fstab приоритеты можно установить с помощью параметра pri=, например:

/var/swap.img none swap defaults,pri=100 0 0
/mnt/SecondDrive/swap.img none swap defaults,pri=10 0 0

настройки sysctl (и sysfs)

Мы будем использовать команду sysctl для изменения настроек, предназначенных для диспетчера виртуальной памяти Linux.

Есть только один параметр, который я бы рекомендовал изменить: vm.swappiness. Этот параметр сообщает ядру Linux/обработчику виртуальной машины, насколько вероятно использование виртуальной машины. Это процентное значение от 0 до 100.

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

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

Ниже приведен пример изменения настроек sysctl. Для получения дополнительной информации вы можете ввести sysctl --help или man sysctl.

bash-root@my.droplet:/var# sysctl -w vm.swappiness=30
vm.swappiness = 30
bash-root@my.droplet:/var# _

Вы также можете запустить sysctl -a, чтобы просмотреть ВСЕ параметры sysctl (не только VM) или sysctl -a | grep vm..

Или, чтобы просмотреть один параметр (вы можете изменить имя ключа после команды grep для каждого параметра):

bash-root@my.droplet:/var# sysctl -a | grep vm.swappiness
vm.swappiness = 30
bash-root@my.droplet:/var# _

Есть много других настроек для виртуальной машины Linux (vm.*) — хотя они выходят за рамки общей темы этой статьи, и я обычно не рекомендую изменять их настройки. Однако в конце этой статьи (в ПРИЛОЖЕНИИ) я включил небольшой список параметров, которые, возможно, стоит настроить или изучить, и добавил рекомендуемые значения (в скобках) для этих параметров.

На веб-сайте ядра Linux есть полный список опций и их использование, хотя не каждое ядро может реализовать все опции. На момент написания этот документ уже немного устарел, но ни в коем случае не является бесполезным или устаревшим. Вот ссылка: https://www.kernel.org/doc/Documentation/sysctl/vm.txt.

Обратите внимание, что в некоторых описаниях в этом документе настройки относятся к файлам, потому что они также доступны/настраиваются через систему Linux SysFS (Википедия).

<а имя=\8\>

Заключение

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

Комментарии, исправления, файлы cookie приветствуются! ном ном ном..

Ссылки и Приложение

Использованная литература, ссылки:

Ниже приведен список параметров, связанных с sysctl/sysfs vm, которые, возможно, стоит настроить или изучить, а также мои рекомендуемые значения для некоторых параметров. Эти описания намеренно короткие — пожалуйста, обратитесь к справочной ссылке на kernel.org для получения полной информации.

dirty_background_bytes**
	
	Contains the amount of dirty memory at which the background kernel flusher threads
	will start writeback.
		
	Note: dirty_background_bytes is the counterpart of dirty_background_ratio. Only
	one of them may be specified at a time. When one sysctl is written it is
	immediately taken into account to evaluate the dirty memory limits and the
	other appears as 0 when read.

dirty_background_ratio**
	
	Contains, as a percentage of total system memory, the number of pages at which
	the background kernel flusher threads will start writing out dirty data.
	
	Note: dirty_background_ratio is the counterpart of dirty_background_bytes. Only
	one of them may be specified at a time. See above.

dirty_bytes**
	
	Contains the amount of dirty memory at which a process generating disk writes
	will itself start writeback.
	
	Note: dirty_bytes is the counterpart of dirty_ratio. Only one of them may be
	specified at a time. When one sysctl is written it is immediately taken into
	account to evaluate the dirty memory limits and the other appears as 0 when
	read.

dirty_expire_centisecs**

	This tunable is used to define when dirty data is old enough to be eligible
	for writeout by the kernel flusher threads.  It is expressed in 100'ths
	of a second.  Data which has been dirty in-memory for longer than this
	interval will be written out next time a flusher thread wakes up.

dirty_ratio**

	Contains, as a percentage of total system memory, the number of pages at which
	a process which is generating disk writes will itself start writing out dirty
	data.
	
	Note: dirty_bytes is the counterpart of dirty_ratio. Only one of them may be
	specified at a time. See above.

dirty_writeback_centisecs**

	The kernel flusher threads will periodically wake up and write `old' data
	out to disk.  This tunable expresses the interval between those wakeups, in
	100'ths of a second.
	
	Setting this to zero disables periodic writeback altogether.

drop_caches**

	Writing to this will cause the kernel to drop clean caches, dentries and
	inodes from memory, causing that memory to become free.

laptop_mode** (0 or Off for servers)

	laptop_mode is a knob that controls "laptop mode". All the things that are
	controlled by this knob are discussed in Documentation/laptops/laptop-mode.txt.

memory_failure_recovery** (1 or On if supported)

	Enable memory failure recovery (when supported by the platform)
	
	1: Attempt recovery.
	
	0: Always panic on a memory failure.

min_free_kbytes** (2048kb to 4096kb)

	This is used to force the Linux VM to keep a minimum number
	of kilobytes free.  The VM uses this number to compute a
	watermark[WMARK_MIN] value for each lowmem zone in the system.
	Each lowmem zone gets a number of reserved free pages based
	proportionally on its size.
	
	Some minimal amount of memory is needed to satisfy PF_MEMALLOC
	allocations; if you set this to lower than 1024KB, your system will
	become subtly broken, and prone to deadlock under high loads.
	
	Setting this too high will OOM your machine instantly.

oom_dump_tasks**

	Enables a system-wide task dump (excluding kernel threads) to be
	produced when the kernel performs an OOM-killing and includes such
	information as pid, uid, tgid, vm size, rss, nr_ptes, swapents,
	oom_score_adj score, and name.  This is helpful to determine why the
	OOM killer was invoked, to identify the rogue task that caused it,
	and to determine why the OOM killer chose the task it did to kill.
	
oom_kill_allocating_task**

	This enables or disables killing the OOM-triggering task in
	out-of-memory situations.
	
overcommit_memory**

	This value contains a flag that enables memory overcommitment.

overcommit_ratio**

	When overcommit_memory is set to 2, the committed address
	space is not permitted to exceed swap plus this percentage
	of physical RAM.  See above.

page-cluster**

	page-cluster controls the number of pages up to which consecutive pages
	are read in from swap in a single attempt. This is the swap counterpart
	to page cache readahead.
	
panic_on_oom** (0 or Off/disabled)

	This enables or disables panic on out-of-memory feature.

swappiness** (30 to 50)

	This control is used to define how aggressive the kernel will swap
	memory pages.  Higher values will increase agressiveness, lower values
	decrease the amount of swap.

vfs_cache_pressure**

	Controls the tendency of the kernel to reclaim the memory which is used for
	caching of directory and inode objects.

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