Когда родители трудятся, а дети наслаждаются жизнью - их внуки будут просить милостыню

Linux: Преодолеваем ошибку «Cannot allocate memory»

При ручной сборке PHP на виртуальных машинах с минимальным объёмом оперативной памяти, а это как правило VPS с ОЗУ не более 1GB, можно запросто наткнуться на нехватку последней, когда во время выполнения make ваш скрипт сборки падает с предупреждением:


virtual memory exhausted: Cannot allocate memory

Можно ли обойти данную проблему? Конечно, если на время сборки задействовать или расширить свап (SWAP) память. Виртуальную память, которую можно разместить в файле.

Далее рассмотрим вариант, что у нас есть VPS на котором отсутствует SWAP и нам необходимо на время задействовать дополнительные 1GB виртуальной памяти.

Шаг 1: в корне файловой системы создаём файл swapfile размером 1GB который будет выполнять роль SWAP


dd if=/dev/zero of=/swapfile bs=1024 count=1024000

результат выполнения команды:


1024000+0 records in
1024000+0 records out
1048576000 bytes (1.0 GB) copied, 121.885 s, 8.6 MB/s

Шаг 2: подготавливаем SWAP область на основе файла swapfile


mkswap /swapfile

результат выполнения команды:


Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=faaecdac-3dc6-475d-a09f-76ae0238a60e

Шаг 3: устанавливаем режим доступа и владельца для swapfile


chmod 0600 /swapfile && chown root /swapfile

Шаг 4: подключаем swapfile к виртуальной памяти (своппингу)


swapon /swapfile
Шаг 4.1: проверяем успешность подключения файла к своппингу

swapon -s
---
Filename                                Type            Size    Used    Priority
/swapfile                               file    1023996 0       -3

На этом этапе мы добавили к нашей виртуальной памяти дополнительные 1GB пространства и можем смело продолжать свою работу прерванную ошибкой "Cannot allocate memory".

Шаг N: отключаем swapfile от виртуальной памяти


swapoff /swapfile

P.S. При отсутствии дальнейшей необходимости в такого вида SWAP, не забываем удалить файл /swapfile.

Ответить
Обязательные поля помечены *