Проблемы на пустом месте

Есть у меня небольшой инстанс в облаке. 1Гб ОЗУ, диск на 40Гб. Чисто для экспериментов всяких. Недорого. Несколько лет работает исправно, делаю всякие RnD на нем. И вот решил я попробовать что такое Laravel и Lumen. Ставлю — вроде бы ставится, но нет директории vendor и отсутствует файл автолоада.

Я и так и эдак, включил вербоз мод (-vvv) и стал дебажить. Думал может композер неверно стоит или не работает. Разное перепробовал. В итоге нашел, что где-то во время установки композер падает с ошибкой:

proc_open(): fork failed — Cannot allocate memory

Я не ожидал такого подвоха. Попробовал на своем ноуте с 8Гб ОЗУ — все ок. Оказывается композеру просто не хватает памяти. Если у вас такая же проблема, то выходы:

  • собрать все на своем компьютере и залить файлы на нужный сервер
  • собрать все на другом более мощном инстансе и залить файлы на нужный сервер
  • создать файл подкачки

Создаем SWAP

У меня CentOS7, но так же это справедливо для большинства Linux систем. На Ubuntu все тоже самое.

# Проверяем отсутствие свапфайла
swapon -s
# Смотрим есть ли место и что с памятью
free -m
df -h
# Выделяем своп
fallocate -l 2G /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
# Добавляем в автозагрузку
mcedit /etc/fstab
/swapfile none swap sw 0 0
# Подкручиваем настройки
sysctl vm.swappiness=10
sysctl vm.vfs_cache_pressure=50
mcedit /etc/sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure = 50

Вот как-то так решается проблема с композером и большими фреймворками. Для меня это было неожиданно.

Ограничение памяти для PHP

Еще один совет выглядит как запуск композера через PHP с ограничениями + ключи для композера:

$ php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
$ php artisan --dump-autoload

Не пробовал, так как проблему решил через файл подкачки. А в итоге для более комфортной работы просто увеличил память на сервере, благо это облака и все можно сделать одним кликом. Стало чуть дороже, но зато комфортнее.


Лайк, хлопок, шер. Слушайте меня в iTunes, подписывайтесь на Телеграм канал или Вконтакте.