Освобождение зарезервированной памяти VPS

В Linux по умолчанию резервируется память для kdump, размер которой можно настроить с помощью параметра crashkernel. Разработчики приложений обычно не сталкиваются с крахом ядра, поэтому эту память можно освободить, изменив файл /etc/default/grub.

Если kdump не требуется, установите crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M, что освободит часть памяти.

Просмотр: cat /etc/default/grub

Значение по умолчанию:

GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"

Пояснение поля crashkernel: для хостов с памятью 0-1 ГБ резервируется 0 МБ, для 1-4 ГБ — 192 МБ, для 4-128 ГБ — 384 МБ, для более 128 ГБ — 512 МБ.

Хост с 1 ГБ переходит в диапазон 1-4 ГБ, резервируя 192 МБ для kdump. Хост с 4 ГБ переходит в диапазон 4-128 ГБ, резервируя 384 МБ для kdump.

Изменение: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub

Перезагрузка: sudo update-grub && sudo reboot

Для VPS 2C1G разница видна: 366 МБ и 562 МБ.

# До изменений
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          707180      340772      123400        2624      358872      366408
Swap:              0           0           0

# После изменений
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          903788      341656      451380        2616      251032      562132
Swap:              0           0           0

Для VPS 2C4G: 3.1 ГБ и 3.5 ГБ.

# До изменений
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3512696      377672     2870944        1260      415116     3135024
Swap:              0           0           0

# После изменений
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3905912      374468     3408304        1252      270508     3531444
Swap:              0           0           0

Дополнительная информация о kdump

Kdump — механизм дампа памяти при крахе ядра, сохраняющий состояние памяти Linux при сбое. Он основан на kexec, позволяющем загрузить новое ядро без перезагрузки BIOS. При kernel panic основное ядро загружает аварийное ядро (crashkernel) и сохраняет память в файл (vmcore), который анализируется для выявления причины сбоя.

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