Обновление PHP Composer «не удается выделить память» ошибка (с помощью Laravel 4)

91

Я просто не могу решить эту проблему.

Я нахожусь в основном плане Linode 1G RAM. Попытка установить пакет через Composer, и это не позволяет мне. Предел моей памяти установлен на "-1" на PHP.ini

Есть ли что-то еще, что я могу сделать, чтобы установить это?

Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing thujohn/rss (dev-master df80a7d)
    Downloading: 100%         
PHP Fatal error:  Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975

Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php:975
Stack trace:
#0 [internal function]: Composer\Util\ErrorHandler::handle(2, 'proc_open(): fo...', 'phar:///usr/loc...', 975, Array)
#1 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(975): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(853): Symfony\Component\Console\Application->getSttyColumns()
#3 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(818): Symfony\Component\Console\Application->getTerminalDimensions()
#4 phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php(752): Symfony\Component\Console\Application->getTerminalWidth()
#5 phar:///usr/local/bin/com in phar:///usr/local/bin/composer/vendor/symfony/console/Symfony/Component/Console/Application.php on line 975
Теги:
composer-php
laravel-4

20 ответов

53
Лучший ответ

Немного старый, но на случай, если кто-то новый ищет решение, обновление вашей версии PHP может решить проблему.

Также вы должны записывать файл composer.lock и выполнять установку композитора в производственной среде, которая менее ресурсоемкая.

Подробнее здесь: https://github.com/composer/composer/issues/1898#issuecomment-23453850

  • 9
    BRILLIANT! Это сработало. Я не обновил свой PHP, но зафиксировал файл composer.lock и обновил все правильно. Спасибо.
  • 0
    Поздно до вечеринки, но я просто выключил Apache и MySQL. Есть причина, по которой я использую VPS объемом 512 МБ, не хочу тратить деньги.
Показать ещё 2 комментария
205

Похоже, вы исчерпали память подкачки, попробуйте это

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

как упоминалось @BlackBurn027 в комментариях ниже, это решение было описано в здесь

  • 15
    Вы, сэр, гений - это не проблема php и удаление файлов не поможет. Я должен следовать вашим инструкциям (с sudo) на моем VPS. Это единственный полезный ответ для владельцев VPS.
  • 0
    Это сработало и для меня, и мне не пришлось обновлять свой PHP. Спасибо!
Показать ещё 11 комментариев
31

Я столкнулся с той же проблемой. Я нахожусь на бесплатном Microinstance AWS, у которого меньше памяти. Я всегда пробую один из нижеперечисленных вариантов, и он всегда работает (перед этим проверьте, установлена ​​ли последняя версия композитора)

sudo php -dmemory_limit=750M composer.phar update

или удалите содержимое папки поставщика и попробуйте обновить состав.

sudo rm -rf vendor
sudo php -dmemory_limit=750M composer.phar update --no-scripts --prefer-dist
sudo php artisan --dump-autoload

Второй параметр пытается обновить все компоненты, если обновление отсутствует, он берет пакет из кэша, который еще больше захватывает dist

Примечание. Пожалуйста, измените ограничение на память по вашему выбору.

или

Создайте раздел swap и попробуйте. Раздел подкачки - это часть жесткого диска, который linux использует как виртуальную память, когда заканчивается физическая память. Он похож на файл свопинга Windows, вместо использования фактического файла, вместо этого linux использует раздел на жестком диске.

Надеюсь, что это поможет

  • 1
    Я опустил предел памяти до 500M, и композитор установил то, что мне было нужно.
  • 0
    Вы также можете использовать реальный файл подкачки вместо раздела. см. cyberciti.biz/faq/linux-add-a-swap-file-howto
Показать ещё 2 комментария
13

Как руководство по устранению неполадок композитора здесь Это может произойти, потому что VPS не хватает памяти и не имеет пространства подкачки включен.

free -m

Чтобы включить обмен, вы можете использовать, например:

sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo /sbin/mkswap /var/swap.1
sudo /sbin/swapon /var/swap.1
  • 0
    Большое спасибо без обновления php5 до php7 это сработало
  • 0
    Где я могу добавить этот код
Показать ещё 1 комментарий
10

У меня была такая же проблема с бродягой. Я исправил его, выделив больше памяти.

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end
  • 1
    Решил эту проблему и для меня. Обратите внимание, что в vb.customize ... 2.x вместо vb.customize ... вы можете сделать vb.memory = 1024 .
10

Просто введите следующие команды:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Должен работать на машинах с низкой памятью

  • 0
    Работал на меня. Я написал исчерпывающий ответ здесь - stackoverflow.com/questions/26850332/…
  • 0
    Это не работает. И это удалило все мои папки продавца. Это не правильно!
Показать ещё 2 комментария
6

Вот обходной путь, который я нашел, который работает для меня каждый раз:

df -h 
dd if=/dev/zero of=/swapfile bs=1M count=1024
sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
mkswap /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo 'echo "/swapfile  none  swap  defaults  0  0" >> /etc/fstab' | sudo sh

free -m

confirm u see your swap there:
total used free shared buffers cached
Mem: 494 335 158 0 19 62
-/+ buffers/cache: 254 240
Swap: 1023 3 1020

watch free -m
  • 3
    Вау, отправлять команды без объяснения того, что они делают, возможно, опасно! Хотя я могу однозначно сказать, что это будет работать на большинстве систем. В основном вы создаете пространство подкачки, чтобы HD можно было использовать в качестве ОЗУ. Вот подробное руководство о том, как это сделать, объясняя каждую команду: digitalocean.com/community/tutorials/…
  • 0
    Спасибо за разъяснение команд, приятно знать, что на самом деле делает скрипт, прежде чем выполнять его. Но точно так же не очень хорошо, как вы продвигаете digital ocean и свое руководство / пост в блоге.
Показать ещё 1 комментарий
5

Попробуй это:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1
4

Кажется, это повторяющаяся проблема с 1 ГБ и меньшими экземплярами сервера. Помимо попыток отключить процессы и настроить параметры подкачки, вы можете установить их на локальный компьютер и загрузить.

  • 1
    Ага. Забавно, что, если я удаляю весь проект, делаю свежий git pull, а затем выполняю установку composer, похоже, это работает. Странный.
  • 0
    Разочаровывая, я развертываю несколько проектов L4 на инстансах Linode емкостью 1 ГБ и теперь беспокоюсь о достижении потолка памяти.
Показать ещё 2 комментария
3

Попробуйте следующее:

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

Эта работа для меня на Centos 6

  • 0
    у меня это работало на AWS Opsworks EC2 Instance Ubuntu 14.04! Спасибо!
3

Иногда с помощью самообновляющегося композитора он решает проблему

php composer.phar self-update

Приветствия

  • 0
    Это должно быть первым делом, чтобы попытаться решить проблему. У меня была проблема с 1.3.3, самообновление до 1.4.0 решило проблему. Совет: вы можете обновить свой ответ, чтобы покрыть также случай использования composer self-update , если кто-то, не знакомый с композитором, должен прочитать этот ответ.
  • 0
    получить разрешение отказано при переименовании
2

Вот шаги для решения проблемы: (используется метод быстрого и быстрого выделения файлов SWAP)

Настройка SWAP на сервере (Ubuntu 16.04 SWAP исправляет ошибки нехватки памяти)

Проверьте, если у вас уже есть своп, память и размер диска:

    sudo swapon -s
    free -m
    df -h

Создайте файл подкачки: (измените 1G на 4G, если вы хотите 4GB памяти SWAP)

    sudo fallocate -l 1G /swapfile 

Проверьте файл подкачки:

    ls -lh /swapfile

Назначить файл подкачки:

    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile

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

    sudo swapon -s
    free -m
    df -h

Прикрепить файл подкачки при перезагрузке системы:

    sudo nano /etc/fstab
        /swapfile   none    swap    sw    0   0

Настройте параметры файла подкачки:

    cat /proc/sys/vm/swappiness
    cat /proc/sys/vm/vfs_cache_pressure

    sudo sysctl vm.swappiness=10
    sudo sysctl vm.vfs_cache_pressure=50

    sudo nano /etc/sysctl.conf

Приоритет файла SWAP: (0-100% => 0: не помещать в своп, 100: ставить SWAP и освобождать оперативную память)

        vm.swappiness=10

Удалить inode из кэша: (100: система слишком быстро удаляет информацию inode из кэша)

        vm.vfs_cache_pressure = 50
2

Я решил ту же проблему в Vagrant. Я увеличил значение memory_limit и удалить кеш композитора: sudo rm -R ~/.composer и, наконец, бродячая перезагрузка.

2

Я попадаю в эту ситуацию большую часть времени, поэтому обычно я использовал шаг настройки памяти подкачки.

Но теперь я нашел простой альтернативный трюк, который работал у меня.

Run   composer update --no-dev Кроме composer update

1

имеют такую ​​же проблему с обновлением php composer.phar на моем хосте в 512 Мб.

решена с помощью php composer.phar install

0

отредактируйте файл php.ini и увеличьте значение memory_limit.

memory_limit = 1G

решит эту проблему.

0

Сделайте команду свопа и запустите команду композитора. Надеюсь, это сработает для вас.

 $ dd if=/dev/zero of=/swapfile bs=1024 count=512k
 $ mkswap /swapfile
 $ swapon /swapfile
 $ echo "/swapfile       none    swap    sw      0       0 " >> /etc/fstab
 $ echo 0 > /proc/sys/vm/swappiness
 $ chown root:root /swapfile
 $ chmod 0600 /swapfile
0

Я попытался просто удалить папку поставщика и файл composer.lock, а затем запустил команду "composer clear-cache", а затем установил композитор. Поэтому он работает без ошибок.

0

Я увеличил PHP memory_limit с 128M по умолчанию до 512M и перезапустил сервер. Это решило проблему.

  • 1
    перезагрузка не требуется, поскольку PHP не работает как сервис.
0

У меня была аналогичная проблема на самом дешевом сервере (512 МБ ОЗУ), размещенном DigitalOcean, и я был также запущен Jenkins CI на том же сервере. После того, как я остановил экземпляр Jenkins, команда установки компоновщика работала (ну, в какой-то момент, она не удалась с расширением mcrypt, отсутствующим помимо уже установленного!).

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню