Рубрики
swap

swap \ файловая система SWAP \ файл подкачки \ /proc/meminfo

sysctl.conf
sysctl -p
vm.swappiness = 2

Раздел подкачки может быть создан либо на стандартном разделе жесткого диска, 
либо на специально отформатированном для этого разделе.
mkswap /dev/sda4 - Форматирует раздел sda4 как раздел подкачки
mkswap -с /dev/sda4 - проверить раздел подкачки на наличие поврежденных блоков
dd if=/dev/zero of=/tmp/swapfile  - создание пустого файла /tmp/swapfile  
chmod 600 /tmp/swapfile - выставляем права 600
mkswap /tmp/swapfile - созидание файловой системы для swap

swapon -s - отобразить все разделы подкачки

swapon /tmp/swapfile - включить swap из  /tmp/swapfile
swapon -v /tmp/swapfile - включить swap и отобразить больше информации
swapon /dev/sda1 - включить раздел подкачки на /dev/sda1
swapoff -v /tmp/swapfile - отключить раздел подкачки  /tmp/swapfile
swapon -v -p 1 /dev/sda1 - назначает разделу sda1 высший приоритет подкачки

Создание нового раздела:

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

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


mkswap /dev/hda3 - создание swap-пространство на разделе hda3

swapon /dev/hda3 - включить swap-пространство, расположенное на разделе hda3

swapon /dev/hda2 /dev/hdb3 - активировать swap-пространства, расположенные на разделах hda2 и hdb3

Файл подкачки:

!!! Учитывайте что файлы подкачки не поддерживаются в файловой системе btrfs!
Чтобы не использовать раздел подкачки, вы можете выгружать память в отдельный файл подкачки. 
Конечно, это решение на крайний случай, так как из-за такой операции замедляется доступ к файловой системе. 
Единственное достоинство файла подкачки заключается в том, что для него не требуется отдельный раздел.
Обычно файлы подкачки сохраняются в разделе /dev. В первую очередь создаем командой dd пустой файл заданного размера. 
При этом в качестве источника данных используется /dev/zero. Из этого устройства можно считать сколько угодно нулевых байт. 
Размер нужно указывать в блоках, причем каждый блок равен 1024 байт. 
Кроме того, файл подкачки, подобно разделу подкачки, форматируется командой mkswap и активируется с помощью swapon.

В следующем примере мы создадим маленький файл подкачки размером около 1 Мбайт:
dd bs=1024 if=/dev/zero of=/swapfile count=1000
mkswap /swapfile 1000
sync
swapon -v /swapfile


Файлы подкачки можно указать в fstab, как и разделы подкачки:
/etc/fstab /swapfile   none      swap     sw     0 0

Работа оперативной памяти в linux

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

Чтобы проверить, есть ли в вашем распоряжении виртуальная память и, если есть, то сколько (имеется или действительно применяется), выполните команду free.
В следующем примере имеем 1519 Мбайт RAM и 2000 Мбайт виртуальной памяти. 
В настоящее время, согласно примеру, используется 401 Мбайт RAM для работы с программами и данными, остаток применяется как файловый буфер (кэш). 
Виртуальная память пока не задействуется.
free -m
             total  used   free  shared  buffers  cached
Mem:         1519   1479   39    0       67       1010
-/+ buffers/cache:  401    1117
Swap:               2000   0     2000

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

Причина проста: 
ядро управляет кэшем для предоставления доступа к файлам «для чтения»; 
если позже понадобится какой-либо файл, его можно считать из кэша. 
Как только кэш превышает по размеру свободную оперативную память, Linux выгружает блоки памяти, которые давно не применялись, в раздел подкачки. 
Это совсем не означает, что осталось мало памяти. Linux просто пытается использовать имеющуюся память как можно более эффективно.

Управление работой виртуальной памяти:

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

Параметр ядра /proc/sys/vm/swappiness позволяет вам указать, что должно делать ядро в случае выбора — уменьшить кэш или выгрузить данные.

Стандартная настройка для swappiness равна 60, диапазон возможных значений: от 0 до 100. 
Значение 0 означает, что ядро по возможности не будет использовать постраничную организацию памяти; 
100 говорит о том, что области памяти, не применяемые долгое время, будут отправляться в раздел подкачки как можно раньше. 
60 - говорит о том, что если 40% памяти занято, начинаем использовать swap 
1-10 - рекомендованное значение когда у вас очень много памяти 
0 - Не рекомендуется (/proc/sys/vm/swappiness) ставить меньше единицы (то есть 0), так как swap спасает нас от oomkiller

ommkiller - при не хватке памяти приходит и убивает процесс, критерии разные,
убивает процесс который запросил больше памяти чем есть,
спящие процессы которые не использовали память давно,
ну и т.д.
Увидеть приход oomkiller можно в dmesg
Строка "Out of memory: Killed process"


vm.swappiness = 2

/proc/meminfo

 cat /proc/meminfo 
MemTotal:       132026284 kB - всего памяти, на самом деле при загрузке системы система забирает память под свои нужды, используем journalctl, dmesg,  ищем строку Memory: 432208K reserved   
MemFree:          626072 kB - память которую система может прям сразу выделить без всяких буферов, cash и т.д.
MemAvailable:   52605812 kB - доступная память, которая система может выделить, освободив из буфера, cash и т.д.
Dirty:               300 kB - очень важный параметр, это память которая должна записаться на блочное устройство, но еще не переписалась, но система говорит что уже все закончила, sync

Создание swap Вариант 1:

Предположим вам нужно увеличить swap раздел, скажем до 2 гигабайт, /swap2gb(для Linux)
# dd if=/dev/zero of=/swap2gb bs=1024k count=2000
# mkswap /swap2gb                    # Создать swap
# swapon /swap2gb                    # Включить swap, теперь его можно использовать
# swapoff /swap2gb                   # Отключить swap
# rm /swap2gb

Создание swap Вариант 2:

!!! создание swap раздела на лету с добавлением в fstab 

fallocate -l 1G /.swap
chmod 600 /.swap
mkswap /.swap
echo '/.swap none swap defaults 0 0' >> /etc/fstab
swapon /.swap