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.