Освобождение зарезервированной памяти VPS
Categories:
В 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.