Освобождение оперативной памяти от буферов
В начале success-story:
srv # virsh --connect qemu:///system Добро пожаловать в virsh — интерактивный терминал виртуализации. Введите «help» для получения справки по командам «quit», чтобы завершить работу и выйти. virsh # edit VM007 XML-конфигурация домена VM007 не изменилась. virsh # start VM007 ошибка: Не удалось запустить домен VM007 ошибка: внутренняя ошибка: process exited while connecting to monitor: ioctl(KVM_CREATE_VM) failed: 12 Cannot allocate memory 2019-02-24T17:13:53.061647Z qemu-system-x86_64: failed to initialize KVM: Cannot allocate memory virsh # start VM007 Домен VM007 был успешно запущен
Т.е. видно, что изначально либвирт пожаловался на нехватку памяти под виртуалку, но со второй попытки виртуалка запустилась.
Во втором терминале между этими попытками было выполнено:
srv /kvm # free total used free shared buff/cache available Mem: 65995988 42246392 469704 1532 23279892 23111068 Swap: 1689596 0 1689596 srv /kvm # sync; echo 1 > /proc/sys/vm/drop_caches srv /kvm # free total used free shared buff/cache available Mem: 65995988 42254228 23473300 1532 268460 23174592 Swap: 1689596 0 1689596
Первый запуск free показывает, что available ~23Гб, но почти вся она занята под буфера и кеш. Чтобы высвободить эту память говорим заклинание.
sync – сбрасывает системный буфер.
Как указано в едрёной документации, запись в /proc/sys/vm/drop_caches производит очистку кеша без убийства процессов.
Можно записать три значения:
- 1 — очистка page cache (т.е. образы дисковых блоков данных в памяти)
- 2 — очистка dentries и inodes (т.е., грубо, информация о файлах и директориях)
- 3 — очистка page cache, dentries и inodes
На продакшене категорически не рекомендуется выполнять «echo 3 …»