Оновлення PHP Composer "не може виділити пам'ять" помилка (використовуючи Laravel 4)


169

Я просто не можу вирішити це.

Я перебуваю на базовому плані оперативної пам’яті Linode 1G. Намагаюся встановити пакет через 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

Відповіді:


97

Трохи старий, але на випадок, якщо хтось новий шукає рішення, оновлення вашої версії PHP може вирішити проблему.

Крім того, вам слід ввести файл composer.lock і робити встановлення композитора у виробничому середовищі, що не потребує ресурсів.

Детальніше тут: https://github.com/composer/composer/isissue/1898#issuecomment-23453850


12
БРІЛІАНТ! Це спрацювало. Я не оновлював PHP, але виконуючи файл composer.lock та оновлення встановив усі речі належним чином. Дякую.
ericbae

6
Пізно на вечірку, але я просто вимкнув Apache та MySQL. Є причина, що я використовую оперативну пам'ять VPS 512 Мб, не хочу витрачати гроші.
Кумар

11
Оновлення PHP не є рішенням. У мене 7.0.21, і досі отримую цю помилку.
cj5

@ Рішення Кумара працювало на мене. Супер легко і як більшість речей, очевидне заднім поглядом :)
Джеймс Бриджвотер

Дуже дякую. Врятувало мені купу часу.
Джей Гет

404

Схоже, у вас не вистачає пам'яті своп, спробуйте це

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

Як згадував @ BlackBurn027 у коментарях нижче, це рішення було описано тут


27
Ви, сер, геній - його не проблема PHP та видалення файлів не допоможе. Я повинен слідувати вашим інструкціям (з судо) на моєму VPS. Це єдина корисна відповідь тут для власників VPS.
Кролл

4
getcomposer.org/doc/articles/… як згадує джерело
BlackBurn027

1
Це працювало для мене, але я розгублений, що насправді роблять ці команди, чи може хтось пояснити їх?
Йосиф Астрахан

2
іноді 1024 недостатньо ... Використовуйте натомість 2048
псилоси

1
@JaberAlNahian ви можете зробити постійний своп, будь ласка, перевірте тут digitalocean.com/community/tutorials/…
Mohammed Omer

79

Як посібник з усунення несправностей композитора тут. Це може статися тому, що у 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

Або якщо вище не працює, то можна спробувати створити файл свопу

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

дякую багато, не оновлюючи php5 до php7, це спрацювало
Shadab K

Ви повинні запустити його в CLI Linux
Umair Hamid

Він знову видав помилку, але після роботи оновлення композитора працював чудово.
Амір Гаджіха

І ви можете перевірити [офіційний документ] [2] getcomposer.org/doc/articles/…
Thilina Dharmasena

38

Я зіткнувся з тим же питанням. Я перебуваю на AWS Free Microin substance, яка має менше пам’яті. Я завжди пробую один із наведених нижче варіантів, і він завжди працює (перед усім, будь ласка, перевірте, чи встановлена ​​у вас остання версія композитора)

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
Я знизив ліміт пам’яті до 500М і композитор встановив те, що мені потрібно.
devNoise

ви можете також використовувати фактичний файл swap замість розділу. дивіться cyberciti.biz/faq/linux-add-a-swap-file-howto
rwilson04

2
У мого акаунта цифрового океану була
така

tristanbailey ваше рішення спрацювало, дякую! До того, як я зупинив mysql і apache, я не зміг оновити, навіть встановивши ліміт пам'яті php.
Еліас Кускумвекакіс

Під час запуску sudo php -dmemory_limit=750M composer.phar update я отримав цю помилку, Could not open input file: composer.pharбудь ласка, допоможіть
Варун Нахарія

15

Легко введіть ці команди:

rm -rf vendor/

rm -rf composer.lock

php composer install --prefer-dist

Має працювати на машинах з низькою пам'яттю


Працювали для мене. Я написав вичерпну відповідь тут - stackoverflow.com/questions/26850332 / ...
halkujabra

Не працює. І це видалило всю папку мого постачальника. Це неправильно!
Володимир Ковальчук

У чому проблема видалення постачальника? просто запустіть установку / оновлення знову ...
вставте

1
Видалення постачальника не зовсім помилково, хоча воно порушує сайт і зберігає його в порушеному стані, якщо установка все ще не працює. Однак видаляти файл блокування на виробничих машинах не рекомендується. Ви повинні робити фіксований файл і лише встановлювати, а не оновлювати. Насправді, видаляючи файл блокування, ви змушуєте Composer встановлювати з файлу json, саме звідки беруться процеси, що потребують пам'яті (визначаючи, яку версію встановити).
Шауна

Добре слідкувати за цим, якщо ви не знаходитесь у виробничому середовищі, оскільки це порушить проект, поки композитор не завершиться встановленням
Bizarro

11

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

Налаштування SWAP сервера (Ubuntu 16.04 SWAP для виправлення помилок пам'яті)

Перевірте, чи є у вас вже своп, розмір пам'яті та диска:

    sudo swapon -s
    free -m
    df -h

Зробіть файл swap: (змініть 1G на 4G, якщо ви хочете 4 Гб пам'яті SWAP)

    sudo fallocate -l 1G /swapfile 

Перевірте файл свопу:

    ls -lh /swapfile

Призначити файл свопу:

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

Перевірте, чи підкачайте OK, пам'ять та розмір диска:

    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

Я не знаю, що мені робити на останньому кроці sudo nano /etc/sysctl.conf, тому я пропускаю його, потім перезавантажую Nginx, а потім роблю composer install(раніше я видалив каталог постачальників) і він працює. Дякую!
arhakim

10

У мене було таке ж питання про бродягу. Я зафіксував це все, щоб отримати більше пам'яті.

 config.vm.provider :virtualbox do |vb|
      vb.customize ["modifyvm", :id, "--memory", "1024"]
 end

1
Вирішили це питання і для мене. Зауважте, що в бродячому 2.x замість vb.customize ...вас можна зробити vb.memory = 1024.
акобстер

10

Спробуйте

це в основному підняття пам'яті своп

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


6
Будь ласка, додайте до своєї відповіді якесь пояснення, щоб інші могли дізнатися з нього.
Ніко Хааз

Я погоджуюся, що це повинно мати більше пояснень, але це спрацювало на мене (в основному це піднімає своп-пам'ять). Дякую!
користувач1015214

8

Спробуйте:

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

/sbin/mkswap /var/swap.1

/sbin/swapon /var/swap.1

1
Будь ласка, додайте до своєї відповіді якесь пояснення, щоб інші могли дізнатися з нього, особливо: що ви змінили порівняно з іншими відповідями, які використовують той самий підхід? Чи потрібно дублювати їх відповідь?
Ніко Хааз

7

Ось вирішення того, що я виявив, що працює для мене кожен раз:

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

5
Wowwow, розміщувати команди, не пояснюючи, що вони роблять, мабуть, небезпечно! Хоча, напевно, можу сказати, що це працюватиме в більшості систем. В основному ви створюєте розподілення простору Swap, щоб HD можна було використовувати як ОЗУ. Ось вичерпний посібник щодо того, як це зробити, пояснюючи кожну команду: digitalocean.com/community/tutorials/…
adelriosantiago

Дякую за роз’яснення команд, приємно знати, що насправді робить сценарій, перш ніж виконувати його. Але так само не приємно, як ви просуваєте цифровий океан та ваш підручник / допис у блозі.
Горан

Підручник чудовий, показуючи крок за кроком із поясненнями!
Тарік

Дякую! Ви вкажете допомогти мені встановити Drupal Presto на 1 Гб оперативної пам’яті. Я змінив 1024 на 2048 рік.
Нікіт

7

Я спробував, просто видаливши папку постачальника та файл composer.lock, і тоді я запускаю команду, composer clear-cacheа потім composer install. Так це працює без будь-яких помилок.


6

Ви можете скористатися наступним, щоб перевірити вільну (своп) пам'ять

free -m

total used free shared buffers cached

Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0

Щоб увімкнути своп, ви можете використовувати, наприклад:

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

Я використав free -mі помітив, що у мене немає пам'яті, навіть не в sudo reboot
свопі

4

Здається, це проблема, що повторюється з 1 ГБ і меншими екземплярами сервера. Окрім спроб відключення процесів та налаштування налаштувань свопу, ви можете встановити на локальній машині та завантажити.


1
так. Смішна річ, якщо я видаляю весь проект, роблю свіжий git і потім встановлюю композитор, це, здається, працює. Дивно.
ericbae

Розчаровуючи, я розгортаю кілька проектів L4 в екземплярах Linode 1 ГБ і зараз переживаю, як потрапити на стелю пам'яті.
Макіта

Стара посилання, але може бути корисною
Makita

2
Прийнята відповідь як і раніше найкращий шлях. Ви повинні скористатися composer.lock, а потім запустити інсталяцію замість оновлення на виробничому сервері.
Макіта

3

Іноді самостійним оновленням композитор вирішує проблему

php composer.phar self-update

Ура


Це має бути першим, що потрібно спробувати виправити проблему. У мене була проблема з 1.3.3, виправлено проблему з самостійним оновленням до 1.4.0. Порада: ви можете оновити свою відповідь, щоб вона охоплювала також випадки використання composer self-update, якщо хтось не дуже знайомий композитору читає цю відповідь.
Ніклаус

отримати дозвіл відмовлено, коли відбудеться перейменування
Андрій

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


це працювало для мене на AWS Opsworks EC2 Instance Ubuntu 14.04! Дякую!
Павло Прейбіш

3

Я збільшив PHP memory_limitзі стандартних 128M до 512M і перезапустив сервер. Це вирішило проблему.


3
перезавантаження не потрібна, оскільки PHP не працює як служба.
HelpNeeder

1
Ні , але Apache робить , і , таким чином , він повинен бути перезапущений, щоб зміни вступили в силу ...
Dediqated

1
це потрібно, оскільки апаш завантажує модулі php
Aris

2

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

Але тепер я знайшов просту альтернативну хитрість, яка працювала на мене.

Бігайте, composer update --no-devкрім іншогоcomposer update


2

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



1

Зробіть заміну і знову запустіть команду композитора. Сподіваюся, це спрацює для вас.

 $ 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

1

У своєму випадку я спробував усе, що було перераховано вище. Я використовував Laravel і Vagrant з 4 ГБ пам’яті та свопом, обмеження пам’яті встановлено на -1. Я видалив постачальника / і спробував інші PHP-версії. Нарешті, мені вдалося це працювати, бігаючи

vagrant halt
vagrant up

А потім композиторська інсталяція працювала знову, як завжди.


0

У мене була аналогічна проблема на найдешевшому сервері (512 Мб оперативної пам’яті), розміщеному на DigitalOcean , і я також працював на цьому ж сервері Jenkins CI. Після того, як я зупинив екземпляр Дженкінса, команда встановлення композитора спрацювала (ну, до певної точки, вона не вдалася, якщо розширення mcrypt відсутнє, крім того, що вже встановлено!).

Можливо, якщо у вас на сервері працює інша програма, можливо, варто спробувати її зупинити і повторно запустити команду.


0

Відключіть пакет js та збільшуйте пам'ять. Це повинно це виправити. Я виправив міну, відключивши пакет js.

Дякую


Будь ласка, поділіться детальнішою інформацією щодо вашої відповіді - чому слід вимкнути "js пакетну" допомогу, коли виникає помилка при завантаженні пакета (що трапляється до запуску будь-яких сценаріїв)
Ніко Хааз,

-1

відредагуйте файл php.ini та збільшить значення memory_limit.

memory_limit = 1G

вирішить це питання.


-1
composer update

Loading composer repositories with package information
Updating dependencies (including require-dev)

> mmap () не вдалося: [12] Неможливо виділити пам'ять

Оновіть пам’ять на сервері та вимагайте "4G" Змінити 4 Гб Ram [спробуйте змінити тип сервера або додати більше оперативної пам’яті]

2 Файли, які нам потрібно відредагувати


по команді

# cd /var/www/html
# nano .htaccess

і редагувати "memory_limit 756M”в4G


Php ini на php 7.0

# cd ~
# php –-ini
# sudo nano /etc/php-7.0.ini

memory_limit = 128М до 4G

#AWS #AMAZONLINUX # MAGENTO2 # PHP7.0


1
Будь ласка, додайте пояснення до своєї відповіді. Зміна чого-небудь .htaccessне впливає composerзрештою, оскільки це не проходить через веб-сервер
Ніко Хааз,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.