Проблемы на пустом месте
Есть у меня небольшой инстанс в облаке. 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, подписывайтесь на Телеграм канал или Вконтакте.