Kompozytor wymaga braku pamięci. Błąd krytyczny PHP: wyczerpano dozwolony rozmiar pamięci 1610612736 bajtów

258

Próbuję dodać HWIOAuthBundle do mojego projektu, uruchamiając poniższe polecenie.

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

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

Kiedy próbuję uruchomić narzędzie Composer, otrzymuję błąd braku pamięci.

Używam wersji ^0.6.0@dev dla hwi / oauth-bundle Używam wersji ^1.2@dev dla php-http / guzzle6-adapter Używam wersji ^1.10@dev dla php-http / httplug-bundle ./composer.json zostało zaktualizowane Ładowanie repozytoriów kompozytorów z informacjami o pakiecie Aktualizowanie zależności (w tym require-dev)

Błąd krytyczny PHP: wyczerpano dozwolony rozmiar pamięci 1610612736 bajtów (próbowano przydzielić 67108864 bajtów) w phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver. php w linii 220

Błąd krytyczny: wyczerpano dozwolony rozmiar pamięci 1610612736 bajtów (próbowano przydzielić 67108864 bajtów) w phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php na linii 220

Próbowałem ustawić memory_limit na 2G w moim pliku php.ini, ale nie zadziałało. Znalazłem php.ini, uruchamiającphp -i | grep php.ini

Brian Chen
źródło
3
Czy ostatnio dokonałeś automatycznej aktualizacji kompozytora? Nie jestem pewien, czy 1.4.2 w komunikacie o błędzie wskazuje na wersję 1.4.2, ale najnowsza wersja kompozytora to 1.6.2. A ile masz pamięci fizycznej? Czy to wirtualna maszyna czy serwer w chmurze?
Cerad
@Cerad Tak - wykonałem wcześniej samodzielną aktualizację kompozytora, a moja wersja kompozytora to 1.6.2
Brian Chen
@Cerad, to jest na moim lokalnym komputerze i zdecydowanie powinienem mieć wystarczająco dużo pamięci
Brian Chen
W przypadku wystąpienia tego problemu w projektach, w których wcześniej Composer działał dobrze, radziłbym uruchomić composer self-update --rollback. Zacząłem doświadczać wyczerpania pamięci w wersji 1.9.3, które ustało, gdy powróciłem do wersji 1.8.6.
karolus
Czy nikt inny nie uważa, że ​​to szalone, że bieganie composer requiremoże zużywać więcej niż 1,5 GB pamięci? Kiedy pierwszy raz to zobaczyłem, pomyślałem, że to błąd w narzędziu Composer. Ustawienie limitu pamięci na -1 zadziałało dla mnie ... ale dlaczego 1,5G to za mało? Czy kompozytor naprawdę może tak wiele potrzebować?
Daniel Howard,

Odpowiedzi:

385

Aby uzyskać bieżącą wartość memory_limit, uruchom:

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

Spróbuj zwiększyć limit w swoim php.inipliku (np. /etc/php5/cli/php.iniDla systemów podobnych do Debiana):

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

Możesz też zwiększyć limit za pomocą argumentu wiersza polecenia:

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

Aby załadować lokalizację plików php.ini, spróbuj:

php --ini

Kolejne szybkie rozwiązanie:

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Adam
źródło
33
COMPOSER_MEMORY_LIMIT = -1 aktualizacja kompozytora działa również dla mnie.
Kishan Patel
1
Dzięki za polecenie php --ini! w php 7.4 masz inny plik php ini (php-cli.ini) dla clid
Vincent Decaux.
4
używanie php -d memory_limit=-1 composer.phar installzadziałało dla mnie. Dzięki!
Tomasz Kuter
1
czy memory_limit = -1 to dobre rozwiązanie? wygląda na to, że usuwa limit zużycia pamięci i może ją zużyć.
kamote ulalo
2
W systemie Windows użyjSET COMPOSER_MEMORY_LIMIT=-1
Vincent Decaux
299

W moim przypadku próbowałem wymagać tego pakietu i otrzymywałem plik PHP Fatal error: Allowed memory size of.

Uruchamianie w ten sposób jest dla mnie łatwe i nie musisz aktualizować pliku PHP INI.

przykład: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

Mam nadzieję, że to komuś pomoże.

odubah
źródło
Pomogło też. Mój limit PHP wynosił 128 MB, ale komunikat o błędzie mówił, że limit kompozytora PHP wynosi 1,5 GB (co oznacza, że ​​jest skonfigurowany gdzie indziej dla tego konkretnego przypadku). Więc modyfikacja php.ini nie pomogła, ale ta odpowiedź pomogła.
Tom
84

Inne rozwiązanie z instrukcji :

Composer przestrzega również limitu pamięci zdefiniowanego przez COMPOSER_MEMORY_LIMITzmienną środowiskową:

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

Albo w moim przypadku

export COMPOSER_MEMORY_LIMIT=-1
composer <...>
Thomas Vangelooven
źródło
13
Na komputerze Mac edytowałem, ~/.bash_profileaby dodać alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"i to rozwiązało problem. Pamiętaj, aby pobrać plik po zmianie lub zrestartować terminal
nicholas.alipaz
46

W systemie Windows 10;

Iść do C:\ProgramData\ComposerSetup\bin

Edytuj: composer.bati dodaj memory_limit=-1ostatnią linię, jak pokazano poniżej.

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

Problem rozwiązany ;)

Cyfrowy człowiek
źródło
4
najlepszy dla mnie, prawie wszystkie nie działały dla mnie.
krachleur
1
Musiałem również zaktualizować plik kompozytora bez rozszerzenia .bat (dodając to samo -d memory_limit = -1) do ostatniej linii.
Maulik Gangani
W systemie Windows lokalizacja composer.batnie musi być C:\ProgramData\ComposerSetup\binzawsze, ale myślę, że jest to lokalizacja domyślna. Jeśli jednak ktoś chce znaleźć lokalizację composer.batwystarczy uruchomić wherepolecenie: like where composer. To pokaże dokładną lokalizację.
rineez
30

Ponieważ żadna z poprzednich odpowiedzi nie zawierała odpowiedzi set, zajęło mi trochę czasu, aby dowiedzieć się, jak to zrobić w systemie Windows bez zmiany pliku php.ini, ale oto, co zadziałało dla mnie:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Arno van Oordt
źródło
1
To najlepsza odpowiedź dla środowiska Windows. Dzięki :)
sykez
27

Ten sam problem, nic związanego z „memory_limit” nie działało, ale ...

composer self-update --2

.. rozwiązał mój problem. (aktualizacja: 1.10.17 -> 2.0.4)

Milla Sense
źródło
4
Dla tych composer self-update --2- nie zadziałało i wystąpił błąd. composer self-update --stablewykonał pracę :)
WebMan
23

Po prostu ustaw memory_limitpełną trasę swojego pliku composer.phar i zaktualizuj, w moim przypadku za pomocą polecenia:

php -d memory_limit=-1 C:/wamp64/composer.phar update
Aitor Fernandez
źródło
6
COMPOSER_MEMORY_LIMIT=-1 composer.phar updateDziała również . Zobacz: getcomposer.org/doc/articles/…
mayid
5
na Ubuntu użyj tegophp -d memory_limit=-1 /usr/bin/composer update
podstępne
COMPOSER_MEMORY_LIMIT = -1 kompozytor też pracuje dla mnie .. @mayid Dziękuję. : +1
Kishan Patel
20

Niedawno stwierdzono, że Composer zużywa dużo procesora i pamięci w pakietach, które mają wiele historycznych znaczników. Zobacz: composer / composer # 7577

Rozwiązaniem tego problemu jest użycie symfony/flexlub https://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin
Ruben Gonzalez
źródło
1
Czy potrzebujesz tylko zainstalować wtyczkę na całym świecie? Nic więcej nie można zrobić? Czy mógłbyś wyjaśnić, co właściwie robi ta wtyczka? Czy w takich przypadkach zmniejsza zużycie pamięci przez kompozytora?
rineez
17

Na wypadek, gdyby pojawił się błąd kompozytora z:

Nie można otworzyć pliku wejściowego: kompozytor

biegać:

php -d memory_limit=-1 /usr/local/bin/composer require ...
Marcus Christiansen
źródło
15

Aby pominąć limit pamięci i błąd wersji, użyj poniższego kodu:

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name> --ignore-platform-reqs
Abduhafiz
źródło
15

Ominąłem problem w maszynie wirtualnej Homestead Laravel (vagrant), na której uruchamiane są polecenia kompozytora poprzedzone COMPOSER_MEMORY_LIMIT=-1:

Przykłady

Aby zaktualizować Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

Aby zainstalować pakiet:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable
Davide Casiraghi
źródło
Dzięki stary! Czy jest aktualizowany globalnie, czy tylko dla tego konkretnego polecenia?
andcl
1
Tylko tymczasowe rozwiązanie dla tego konkretnego polecenia.
Davide Casiraghi,
15

W przypadku tego błędu w macOS Catalina i macOS Big Sur użyj tego wiersza:

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

Użyłem tej linii do aktualizacji w Symfony 5. To polecenie działało również z laravel 7.

juanitourquiza
źródło
11

Czasami problem tkwi w limicie pamięci kompozytora. W moim przypadku próbowałem zwiększyć limit pamięci php, ale nadal otrzymałem błąd. Możesz użyć, COMPOSER_MEMORY_LIMIT=-1aby to obejść. Użyj go jako przedrostka:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

W przyszłości musisz go ponownie poprzedzić.

Mam nadzieję że to pomoże.

meow2x
źródło
9

co z oknami?

używam systemu Windows 10 i to polecenie działało dla mnie,

php -d memory_limit=-1 "C:\ProgramData\ComposerSetup\bin\composer.phar" update
Mohamed Hany
źródło
8

Wersja zapoznawcza Composer 2.0 jest już dostępna: https://github.com/composer/composer/releases Naprawiono problem. Możesz skonfigurować podgląd za pomocącomposer self-update --preview

EDYCJA: Composer 2 ze strojeniem pamięci zwolnionym

Anatolij Sokolov
źródło
5

Możesz użyć określonej wersji php podczas uruchamiania Composera

Jeśli, tak jak ja, z jakiegoś powodu używasz 32-bitowego PHP, mimo że twój komputer ma 64 bity, zawsze ograniczy to ilość pamięci przydzielonej Composerowi. Rozwiązałem swój problem w ten sposób:

  • Zainstaluj 64-bitową wersję php gdzieś na swoim komputerze (powiedzmy w C: / php64)
  • W kompozytorze (używając cygwin w moim przypadku), uruchom:

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

Roubi
źródło
Ta sugestia zadziałała dla mnie! Dzięki. Należy zauważyć, że należy również zaktualizować zmienną środowiskową systemu, aby globalnie używać nowej wersji 64-bitowej.
GentleGiant
3

Chcę tylko podzielić się moją sytuacją w tej sprawie.

Kontekst problemu:

  1. Uruchamianie kompozytora w włóczęgach.
  2. Otrzymałem tę wiadomość po próbie uruchomienia programu Composer wymagającego „laravel-doctrine / orm: ~ 1.4.13”:

Błąd krytyczny: wyczerpano dozwolony rozmiar pamięci 1610612736 bajtów (próbowano przydzielić 4096 bajtów) w phar: ///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php w linii 52 Sprawdź https: // getcomposer. org / doc / artykuły / rozwiązywanie problemów.md # memory-limit-errors, aby uzyskać więcej informacji na temat radzenia sobie z błędami braku pamięci.

  1. Próbowałem ustawić limit pamięci php.ini na -1. (wciąż nie działa).

Rozwiązanie:

  1. Najwyraźniej moje pliki composer.json i composer.lock mają pewne problemy. Uruchomiono polecenie $ composer validate, a wynik był następujący: „Plik blokady nie jest aktualny z najnowszymi zmianami w pliku composer.json, zaleca się uruchomienie composer update”.

  2. Uruchomiłem więc aktualizację $ composer i rozwiązałem wszystkie zależności. Imho, kiedy zależności mają pewne problemy, być może budowa drzewa nie jest zsynchronizowana, stąd problem braku pamięci.

Mam nadzieję, że to pomoże każdemu.

Steven Yip
źródło
3

Aby to zmienić i rozwiązać problem na komputerze lokalnym, możesz wprowadzić następujące zmiany w php.inipliku konfiguracyjnym.

  1. Aby zlokalizować php.iniplik konfiguracyjny, możesz użyć następującego polecenia:php --ini

Po uruchomieniu tego polecenia powinieneś zobaczyć wynik podobny do następującego:

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

Plik, który chcemy zmienić, to Loaded Configuration .

  1. Otwórz i wyszukaj plik, memory_limitktóry możesz ustawić, memory_limit = -1aby zapewnić nieograniczoną ilość pamięci dla procesów PHP lub możesz ustawić512MB, 1G, 2G, 5G,....

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

zlokalizuj i ustaw:

$ memory_limit = -1 or memory_limit = 1G
  1. Po zapisaniu pliku możesz zweryfikować zmiany PHP, uruchamiając to polecenie, które wyświetli bieżące ustawienia pamięci w php.inipliku:

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

UWAGA: Po zapisaniu nowa pamięć będzie działać. Nie musisz robić nic więcej.

Więcej informacji: https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer

Jose Seie
źródło
3

Na komputerze Mac php 7.4

biegać

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

Jeśli przeanalizowano dodatkowe pliki .ini: memory_limit musi zostać zmieniony w

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

Jak pisze Jose Seie, ustaw pamięć na

memory_limit = -1 or memory_limit = 1G
Kalle Karlsson
źródło
3

w windows by xampp właśnie zmieniłem:

;memory_limit=512M 

w php.ini na:

memory_limit =-1

następnie zrestartuj Apache przez xampp

oto wynik:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M
saber tabatabaee yazdi
źródło
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.

ustaw memory_limit na -1 działa dla mnie;) (vim /etc/php/7.2/cli/php.ini)

Ted Mosby
źródło
2

W przypadku Macbooka: uruchom polecenie, sudo nano ~/.bash_profileaby edytować bash_profile, a następnie dodajalias composer="COMPOSER_MEMORY_LIMIT=-1 composer" ten plik, a następnie zapisz i zakończ.

Mam nadzieję, że to rozwiąże problem; Miłego kodowania!

Prosanta Chaki
źródło
1

Skondensowałem lub spakowałem użyteczną i akceptowaną odpowiedź tutaj w aliasy / funkcje wielokrotnego użytku (zsh), w celu szybszego i łatwiejszego do zapamiętania ponownego wykorzystania:

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

( php composer.pharma już alias do composerw systemie).

emjayess
źródło
1

Rozwiązałem ten problem za pomocą tego polecenia COMPOSER_MEMORY_LIMIT = -1

Przykład: COMPOSER_MEMORY_LIMIT = -1 kompozytor wymaga larval / ui

Faisal Ahmed
źródło
0

Upewnij się, że pakiet nie jest wymagany, zanim upewnisz się, że folder dostawcy istnieje.

Sprawdź, czy zrobiłeś to composer installwcześniej. Możesz po prostu sklonować repozytorium na swój komputer. Musisz więc zainstalować stare pakiety, zanim będziesz potrzebować nowego. Możesz też dołączyć tę opcję --profiledo polecenia kompozytora, aby wyświetlić informacje o czasie i wykorzystaniu pamięci.

Saud Alfadhli
źródło
-1

Oto inny sposób rozwiązania tego problemu w systemie Windows, jeśli używasz Wampserver. Rzeczywiście, na poziomie wampserver są dwa pliki php.ini , PHP, które można znaleźć w lokalizacji C: \ wamp64 \ bin \ php \ phpx.xx \ php.ini i Apache, które mogą być znaleziono w lokalizacji C: \ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini . Oba te pliki mają parametr memory_limit. Aby mieć pewność rozwiązania tego problemu, lepiej jest ustawić parametr memory_limit = -1 w obu plikach naraz.

Fidèle W. AVI
źródło
1
Ustawienie memory_limitserwera WWW nie będzie miało żadnego wpływu na działanie Composera. Ponadto używanie memory_limit = -1globalne powinno być ostatnią opcją, ponieważ powoduje to wyczerpanie pamięci dla wszystkich działających procesów PHP. Lepiej ustaw to tylko wtedy, gdy tego potrzebujesz, bezpośrednio związane z procesem startowym
Nico Haase,
-1

Używam php7.2 i memory_limit = 512Mdomyślnie ustawiony jest rozmiar . aby zwiększyć rozmiar, musisz zlokalizować php.ini.

W Wamp, znajduje się w C:\wamp64\bin\php\php7.2.23\php.ini. Proszę uważać na wersję PHP, ponieważ jest to folder z nazwą, w moim przypadku mamphp7.2.23

W programie Laragonznajduje się C:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.initak, jak w moim przypadku.

Jeśli nie chcesz mieć nieograniczonej przestrzeni, możesz ustawić dowolny rozmiar, który jest dla Ciebie wygodny, w moim przypadku tak zrobiłem memory_limit = 2G

jeśli chcesz mieć nieograniczoną przestrzeń, możesz zmienić na memory_limit = -1

Chetam Okafor
źródło
-1

Bieganie composer dump-autoloadrozwiązuje to za mnie.

Abdellah Ramadan
źródło
-2

idź i znajdź php.ini w swoim katalogu PHP w przypadku xampp będzie on w xampp / PHP i wewnątrz pliku php.ini aktualizacja memory_limit: 512M do 2048M

Rashid Iqbal
źródło
Dodaj więcej wyjaśnień do swojej odpowiedzi - OP stwierdza, że ​​ustawił memory_limitjuż 2G
Nico Haase,