Композитору потрібно закінчити пам’ять. Фатальна помилка PHP: Вичерпано дозволений обсяг пам'яті 1610612736 байт


258

Я намагаюся додати HWIOAuthBundle до свого проекту, запустивши наведену нижче команду.

composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

HWIOAuthBundle github: https://github.com/hwi/HWIOAuthBundle

Коли я намагаюся запустити composer вимагаю, я отримую помилку з пам'яті.

Використання версії ^0.6.0@dev для hwi / oauth-bundle Використання версії ^1.2@dev для php-http / guzzle6-adapter Використання версії ^1.10@dev для php-http / httplug-bundle ./composer.json оновлено Завантаження репозиторіїв композитора з інформацією про пакет Оновлення залежностей (включаючи require-dev)

Фатальна помилка PHP: Вичерпано дозволений обсяг пам’яті 1610612736 байт (спробу виділити 67108864 байт) у phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver. php на рядку 220

Фатальна помилка: Вичерпано дозволений обсяг пам'яті 1610612736 байт (спробу виділити 67108864 байт) у phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php на лінії 220

Я спробував встановити для memory_limit значення 2G у своєму файлі php.ini, але не вдалося. Я знайшов свій php.ini, запустившиphp -i | grep php.ini


3
Ви робили самообновлення композитора останнім часом? Не впевнені, чи 1.4.2 у вашому повідомленні про помилку вказує на версію 1.4.2, але остання версія композитора - 1.6.2. А скільки у вас фізичної пам’яті? Це сервер vm або хмара?
Cerad

@Cerad Так - Я раніше самостійно оновлював композитора, і моя композиторська версія - 1.6.2
Брайан Чен

@Cerad це на моїй локальній машині, і я точно повинен мати достатньо пам'яті
Брайан Чен

Коли ми стикаємось з цією проблемою на проектах, де Composer раніше працював добре, я б порадив запустити composer self-update --rollback. Я почав стикатися з виснаженням пам'яті з v.1.9.3, яке зупинилося, коли я повернувся до 1.8.6.
karolus

Ніхто більше не вважає, що це досить божевільно, що біг composer requireможе використовувати більше 1,5 Гб пам'яті? Коли я вперше побачив це, я подумав, що це має бути помилка у композиторі. Встановлення обмеження пам’яті на -1 для мене спрацювало ... але як на Землі недостатньо 1,5G? Чи справді композитору так потрібно?
Даніель Говард

Відповіді:


386

Щоб отримати поточне значення memory_limit, запустіть:

php -r "echo ini_get('memory_limit').PHP_EOL;"

Спробуйте збільшити обмеження у вашому php.iniфайлі (наприклад, /etc/php5/cli/php.iniдля систем, подібних до Debian):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

Або ви можете збільшити ліміт за допомогою аргументу командного рядка:

php -d memory_limit=-1 composer.phar require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

Щоб завантажити розташування файлів php.ini, спробуйте:

php --ini

Ще одне швидке рішення:

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

34
COMPOSER_MEMORY_LIMIT = -1 оновлення композитора також працює для мене.
Kishan Patel

1
Дякую за команду php --ini! у php 7.4 у вас є інший файл inp php (php-cli.ini) для clid
Вінсент Деко,

4
використання php -d memory_limit=-1 composer.phar installпрацювало для мене. Дякую!
Томаш Кутер,

1
це memory_limit = -1 хорошим рішенням? здається, він усуває будь-яке обмеження споживання пам’яті і може використати все це.
kamote ulalo

2
У Windows використовуйтеSET COMPOSER_MEMORY_LIMIT=-1
Vincent Decaux

299

У моєму випадку я намагався вимагати цей пакет , і я отримував PHP Fatal error: Allowed memory size of.

Мені було легко запустити так, і вам не потрібно оновлювати файл PHP INI.

приклад: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

Сподіваюся, це комусь допоможе.


Також допоміг. Моє обмеження PHP становило 128 Мб, але в повідомленні про помилку було зазначено, що обмеження PHP-композитора становить 1,5 Гб (що означає, що воно налаштоване в іншому випадку для цього конкретного випадку). Тож модифікація php.ini не допомогла, але ця відповідь допомогла.
Том,

84

Ще одне рішення з посібника :

Composer також поважає обмеження пам’яті, визначене COMPOSER_MEMORY_LIMITзмінною середовища:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

Або в моєму випадку

export COMPOSER_MEMORY_LIMIT=-1
composer <...>

13
На Mac я редагував, ~/.bash_profileщоб додати, alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"і це вирішило це для мене. Обов’язково завантажте файл після зміни або перезапустіть термінал
nicholas.alipaz

46

У Windows 10;

Йти до C:\ProgramData\ComposerSetup\bin

Редагувати: composer.batі додати memory_limit=-1в останньому рядку, як показано нижче.

@echo OFF
:: in case DelayedExpansion is on and a path contains ! 
setlocal DISABLEDELAYEDEXPANSION
php -d memory_limit=-1 "%~dp0composer.phar" %*

Проблема вирішена ;)


4
найкращий для мене, майже всі вони у мене не працювали.
krachleur

1
Мені також довелося оновити файл композитора без розширення .bat (додавши те саме -d memory_limit = -1) до останнього рядка.
Maulik Gangani

У вікнах місце розташування composer.batпотрібно не C:\ProgramData\ComposerSetup\binзавжди, але, мабуть, це місце за замовчуванням. Однак, якщо хтось хоче знайти місце, composer.batпросто потрібно запустити whereкоманду: like where composer. Це покаже точне місцезнаходження.
rineez

30

Оскільки жоден з попередніх відповідей не включав, setмені знадобилося трохи зрозуміти, як це зробити в Windows, не змінюючи php.ini, але ось що мені вдалося:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle

1
Це найкраща відповідь для середовища Windows. Дякую :)
sykez

27

Та сама проблема, нічого з пов'язаного з "memory_limit" не спрацювало, але ..

composer self-update --2

.. вирішив мою проблему. (оновлення: 1.10.17 -> 2.0.4)


5
Для тих composer self-update --2- не спрацювало, і сталася помилка. composer self-update --stableзробив роботу :)
WebMan

23

Просто встановіть memory_limitзазначення повного маршруту вашого файлу composer.phar та оновіть, у моєму випадку командою:

php -d memory_limit=-1 C:/wamp64/composer.phar update

6
Також COMPOSER_MEMORY_LIMIT=-1 composer.phar updateпрацює. Див .: getcomposer.org/doc/articles/…
майд

5
на ubuntu використовуйте цеphp -d memory_limit=-1 /usr/bin/composer update
підлий

COMPOSER_MEMORY_LIMIT = -1 композитор працює і на мене .. @mayid Дякую. : +1
Кішан Патель,

20

Нещодавно було виявлено, що Composer споживає велику пам'ять процесора + на пакети, які мають багато історичних тегів. Див. Композитор / композитор No7577

Вирішенням цієї проблеми є використання symfony/flexабо https://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin

1
Просто потрібно мати плагін, встановлений у всьому світі? Більше нічого не робити? Не могли б ви пояснити, що насправді робить цей плагін? Чи зменшує використання пам'яті композитором у таких випадках?
rineez

17

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

Не вдалося відкрити вхідний файл: композитор

запустити:

php -d memory_limit=-1 /usr/local/bin/composer require ...

15

Для пропуску обмеження пам’яті та помилки версії використовуйте наведений нижче код:

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs

15

Я обійшов проблему у віртуальній машині Homestead Laravel (бродяга), на якій виконуються команди композитора, перед якими COMPOSER_MEMORY_LIMIT=-1:

Приклади

Щоб оновити Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

Щоб встановити пакет:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable

Дякую, чувак! Оновлено глобально чи лише для цієї конкретної команди?
andcl

1
Просто тимчасове рішення для цієї конкретної команди.
Давіде Казірагі

15

Для цієї помилки в macOS Catalina та macOS Big Sur використовуйте такий рядок:

php -d memory_limit=-1 /usr/local/bin/composer update --no-plugins

Я використав цей рядок для оновлення на Symfony 5. Ця команда також працювала з laravel 7.


11

Іноді проблема полягає в обмеженні пам'яті композитора. У моєму випадку я спробував збільшити обмеження php-пам'яті, але все-таки отримав помилку. Ви можете використати, COMPOSER_MEMORY_LIMIT=-1щоб обійти це. Використовуйте його як префікс:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

У майбутньому вам доведеться знову вводити префікс.

Сподіваюся, це допомагає.


9

як щодо вікон?

я використовую Windows 10, і ця команда спрацювала для мене,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update


5

Ви можете використовувати певну версію php під час запуску Composer

Якщо, як і я, з якихось причин ви використовуєте PHP 32 біти, незважаючи на те, що ваш комп'ютер 64 біти, це завжди обмежує обсяг пам'яті, виділеної Composer. Я вирішив свою проблему таким чином:

  • Встановіть 64-бітну версію php десь на своєму комп’ютері (скажімо в C: / php64)
  • У композиторі (використовуючи cygwin в моєму випадку) запустіть:

COMPOSER_MEMORY_LIMIT=-1 C:/php64/php.exe ../composer.phar update


Ця пропозиція спрацювала для мене! Дякую. Зауважте, що вам також потрібно оновити змінну системного середовища, щоб використовувати нову 64-бітну версію глобально.
GentleGiant

3

Просто хочу поділитися моєю ситуацією з цього приводу.

Контекст проблеми:

  1. Композитор, що працює в бродяжому вікні.
  2. Отримував це повідомлення після спроби запуску композитора вимагав "laravel-doctrine / orm: ~ 1.4.13":

Фатальна помилка: Вичерпано дозволений обсяг пам’яті 1610612736 байт (спробу виділити 4096 байт) у phar: ///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php у рядку 52 Перевірка https: // getcomposer. org / doc / articles / problemshooting.md # memory-limit-error для отримання додаткової інформації про те, як усунути помилки в пам'яті.

  1. Спробував встановити обмеження пам’яті php.ini на -1. (все ще не працює).

Рішення:

  1. Очевидно, у моїх composer.json та composer.lock є деякі проблеми. Ran $ composer перевірив, і результат був: "Файл блокування не в курсі останніх змін у composer.json, рекомендується запустити composer update."

  2. Тож я запустив оновлення $ composer, і всі залежності вирішено. Імхо, коли у залежностей є деякі проблеми, можливо, створення дерева не синхронізовано, отже, проблема з пам'яттю.

Сподіваюся, це допомагає комусь там.


3

Щоб замінити це і вирішити проблему на вашому локальному комп'ютері, ви можете внести такі зміни у свій php.iniфайл конфігурації.

  1. Щоб знайти php.iniфайл конфігурації, можна скористатися наступною командою:php --ini

Після запуску цієї команди ви побачите такий вивід:

Configuration File (php.ini) Path: /usr/local/etc/php/7.3
Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini <---- note the path
Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

Файл, який ми хочемо змінити, - це завантажена конфігурація .

  1. Відкрийте та знайдіть, що memory_limitви можете встановити, memory_limit = -1щоб надавати необмежену кількість пам'яті процесам PHP, або ви можете встановити512MB, 1G, 2G, 5G,....

    $ nano /usr/local/etc/php/7.3/php.ini

знайдіть і встановіть:

$ memory_limit = -1 or memory_limit = 1G
  1. Після збереження файлу ви можете перевірити зміни PHP, запустивши цю команду, яка видасть поточні налаштування пам'яті у вашому php.iniфайлі:

    php -r "echo ini_get ('memory_limit'). PHP_EOL;"

ПРИМІТКА. Після збереження нова пам’ять запрацює. Більше нічого робити не потрібно.

Докладніше: https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer


3

На Mac php 7.4

бігти

php --ini

Configuration File (php.ini) Path: /usr/local/etc/php/7.4
Loaded Configuration File:         /usr/local/etc/php/7.4/php.ini
Scan for additional .ini files in: /usr/local/etc/php/7.4/conf.d
Additional .ini files parsed:      /usr/local/etc/php/7.4/conf.d/ext-opcache.ini,
/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

Якщо проаналізовано додаткові файли .ini: потрібно змінити memory_limit у

/usr/local/etc/php/7.4/conf.d/php-memory-limits.ini

Як пише Хосе Сіє, встановіть пам'ять на

memory_limit = -1 or memory_limit = 1G

3

у Windows від xampp я щойно змінив:

;memory_limit=512M 

у php.ini до:

memory_limit =-1

потім перезапустіть Apache за допомогою xampp

це результат:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M

2
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.

встановити для memory_limit значення -1 працює для мене;) (vim /etc/php/7.2/cli/php.ini)


2

Для Macbook: запустіть команду sudo nano ~/.bash_profileдля редагування bash_profile, потім додайте alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"цей файл, а потім збережіть і закрийте.

Сподіваюся, це вирішить проблему; Щасливого кодування!


1

Я звів або упакував тут корисну та прийняту відповідь у багаторазові (zsh) псевдоніми / функції для швидшого та легшого запам'ятовування повторного використання:

# composer high-memory
composermem() {
  php -r "echo ini_get('memory_limit').PHP_EOL;"
}
alias composerbig='COMPOSER_MEMORY_LIMIT=-1 composer $1'

( php composer.pharце вже псевдонім composerу системі).


1

Я вирішив цю проблему за допомогою цієї команди COMPOSER_MEMORY_LIMIT = -1

Приклад: COMPOSER_MEMORY_LIMIT = -1 композитору потрібні larval / ui


0

Переконайтеся, що вам не потрібен пакет, перш ніж переконатися, що існує папка постачальника.

Перевірте, чи робили ви це composer installраніше. Можливо, ви просто клонували сховище на своїй машині. Отже, вам доведеться встановити старі пакети, перш ніж вимагати новий. Або ви можете включити цю опцію --profileдо своєї команди композитора, щоб побачити інформацію про час та використання пам'яті.


-1

Ось ще один спосіб вирішити цю проблему під Windows, якщо ви використовуєте Wampserver. Насправді на рівні wampserver є два файли php.ini , це PHP, які можна знайти в розташуванні C: \ wamp64 \ bin \ php \ phpx.xx \ php.ini та Apache, які можна знайдено в розташуванні C: \ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini . Обидва ці файли мають параметр memory_limit. Тому, щоб бути впевненим у вирішенні цієї проблеми, краще встановити параметр memory_limit = -1 в обох файлах одночасно.


1
Встановлення memory_limitвеб-сервера не вплине на запуск Composer. Крім того, memory_limit = -1глобальне використання має бути найостаннішим варіантом, оскільки це відкриває всі запущені процеси PHP до вичерпання пам'яті. Краще встановіть це лише тоді, коли вам це потрібно, безпосередньо приєднане до стартового процесу
Ніко Хаасе,

-1

Я використовую php7.2, і розмір встановлений memory_limit = 512Mза замовчуванням. щоб збільшити розмір, потрібно знайтиphp.ini .

У Wamp, він знаходиться вC:\wamp64\bin\php\php7.2.23\php.ini . Будь ласка, зверніть увагу на версію PHP, оскільки це папка з іменами, у моєму випадку у мене єphp7.2.23

У Laragon, він знаходиться вC:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.ini як і в моєму випадку.

Якщо ви не хочете надавати необмежений простір, ви можете встановити будь-який зручний вам розмір, у моєму випадку я це зробив memory_limit = 2G

якщо ви хочете дозволити необмежений простір, ви можете змінити на memory_limit = -1



-2

перейдіть і знайдіть php.ini у вашому каталозі PHP у випадку xampp, це буде всередині xampp / PHP і всередині файлу php.ini оновлення memory_limit: 512M до 2048M


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