Composer benötigt nicht genügend Speicher. Schwerwiegender PHP-Fehler: Zulässige Speichergröße von 1610612736 Byte ist erschöpft

226

Ich versuche, HWIOAuthBundle zu meinem Projekt hinzuzufügen, indem ich den folgenden Befehl ausführe.

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

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

Wenn ich versuche, Composer auszuführen, erhalte ich den Fehler "Nicht genügend Speicher".

Verwenden der Version ^0.6.0@dev für hwi / oauth-bundle Verwenden der Version ^1.2@dev für php-http / guzzle6-adapter Verwenden der Version ^1.10@dev für php-http / httplug-bundle ./composer.json wurde aktualisiert Laden von Composer-Repositorys mit Paketinformationen Aktualisieren von Abhängigkeiten (einschließlich require-dev)

Schwerwiegender PHP-Fehler: Zulässige Speichergröße von 1610612736 Byte erschöpft (versucht, 67108864 Byte zuzuweisen) in phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver. PHP auf Linie 220

Schwerwiegender Fehler: Zulässige Speichergröße von 1610612736 Byte erschöpft (versucht, 67108864 Byte zuzuweisen) in phar: ///usr/local/Cellar/composer/1.4.2/libexec/composer.phar/src/Composer/DependencyResolver/Solver.php auf Linie 220

Ich habe versucht, das memory_limit in meiner php.ini-Datei auf 2G zu setzen, aber es hat nicht funktioniert. Ich habe meine php.ini durch Laufen gefundenphp -i | grep php.ini

Brian Chen
quelle
3
Haben Sie in letzter Zeit ein Selbst-Update für Komponisten durchgeführt? Sie sind sich nicht sicher, ob 1.4.2 in Ihrer Fehlermeldung Version 1.4.2 anzeigt, aber die neueste Version von Composer ist 1.6.2. Und wie viel physisches Gedächtnis hast du? Ist es ein VM- oder Cloud-Server?
Cerad
@Cerad Ja - Ich habe zuvor ein Komponisten-Selbst-Update durchgeführt und meine Komponisten-Version ist 1.6.2
Brian Chen
@Cerad dies ist auf meinem lokalen Computer und ich sollte auf jeden Fall genug Speicher haben
Brian Chen
Wenn dieses Problem bei Projekten auftritt, bei denen Composer zuvor einwandfrei ausgeführt wurde, würde ich die Ausführung empfehlen composer self-update --rollback. Mit v.1.9.3 begann ich, Speicher zu erschöpfen, was aufhörte, als ich auf 1.8.6 zurückrollte.
Karolus
Findet sonst niemand, dass es ziemlich verrückt ist, dass beim Laufen composer requiremehr als 1,5 GB Speicher benötigt werden? Als ich das zum ersten Mal sah, dachte ich, dass es ein Fehler im Komponisten sein muss. Das Speichern des Speicherlimits auf -1 hat bei mir funktioniert ... aber wie um alles in der Welt reicht 1,5 G nicht aus? Kann der Komponist wirklich so viel brauchen?
Daniel Howard

Antworten:

340

Führen Sie Folgendes aus, um den aktuellen Wert für memory_limit abzurufen:

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

Versuchen Sie, das Limit in Ihrer php.iniDatei zu erhöhen (z. /etc/php5/cli/php.iniB. für Debian-ähnliche Systeme):

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

Sie können das Limit auch mit einem Befehlszeilenargument erhöhen:

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

Um den Speicherort der geladenen php.ini-Dateien zu erhalten, versuchen Sie:

php --ini

Eine weitere schnelle Lösung:

php composer.phar COMPOSER_MEMORY_LIMIT=-1 require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Adam
quelle
31
COMPOSER_MEMORY_LIMIT = -1 Das Composer-Update funktioniert auch bei mir.
Kishan Patel
1
Danke für den Befehl php --ini! in php 7.4 hast du eine andere php ini datei (php-cli.ini) für clid
Vincent Decaux
4
mit php -d memory_limit=-1 composer.phar installfür mich gearbeitet. Vielen Dank!
Tomasz Kuter
1
Ist memory_limit = -1 eine gute Lösung? Es scheint, als würde dadurch jegliches Speicherverbrauchslimit aufgehoben und alles verbraucht.
Kamote Ulalo
1
Verwenden Sie unter WindowsSET COMPOSER_MEMORY_LIMIT=-1
Vincent Decaux
272

In meinem Fall habe ich versucht, dieses Paket zu benötigen , und ich habe das bekommen PHP Fatal error: Allowed memory size of.

Ich fand es einfach, so zu laufen, und Sie müssen die PHP INI-Datei nicht aktualisieren.

Beispiel: COMPOSER_MEMORY_LIMIT=-1 composer require huddledigital/zendesk-laravel

Hoffe das hilft jemandem.

Oduba
quelle
Hat auch geholfen. Mein PHP-Limit betrug 128 MB, aber die Fehlermeldung besagte, dass das PHP-Composer-Limit 1,5 GB beträgt (was bedeutet, dass es für diesen speziellen Fall an anderer Stelle konfiguriert ist). Die Änderung von php.ini hat also nicht geholfen, aber diese Antwort hat geholfen.
Tom
73

Eine weitere Lösung aus dem Handbuch :

Composer beachtet auch ein Speicherlimit, das durch die COMPOSER_MEMORY_LIMITUmgebungsvariable definiert ist:

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

Oder in meinem Fall

export COMPOSER_MEMORY_LIMIT=-1
composer <...>
Thomas Vangelooven
quelle
12
Auf dem Mac habe ich bearbeitet, ~/.bash_profileum hinzuzufügen, alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"und das hat es für mich gelöst. Stellen Sie sicher, dass Sie die Datei nach der Änderung als Quelle verwenden, oder starten Sie Ihr Terminal neu
nicholas.alipaz
42

Unter Windows 10;

Gehe zu C:\ProgramData\ComposerSetup\bin

Bearbeiten: composer.batund fügen Sie memory_limit=-1in der letzten Zeile wie unten gezeigt hinzu.

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

Problem gelöst ;)

Digitaler Mensch
quelle
3
das beste für mich, fast alle haben bei mir nicht funktioniert.
Krachleur
1
Ich musste auch die Composer- Datei ohne die Erweiterung .bat aktualisieren (dasselbe -d memory_limit = -1 hinzufügen) in der letzten Zeile.
Maulik Gangani
In Windows muss der Speicherort composer.batnicht C:\ProgramData\ComposerSetup\binimmer sein, aber ich denke, das ist der Standardspeicherort. Wenn jedoch jemand den Standort finden möchte, composer.batmuss nur der whereBefehl ausgeführt werden: like where composer. Das zeigt den genauen Ort.
Rineez
26

Da keine der vorherigen Antworten enthalten war set, habe ich ein wenig gebraucht, um herauszufinden, wie es in Windows geht, ohne die php.ini zu ändern, aber hier ist, was für mich funktioniert hat:

set COMPOSER_MEMORY_LIMIT=-1
composer require hwi/oauth-bundle php-http/guzzle6-adapter php-http/httplug-bundle
Arno van Oordt
quelle
1
Dies ist die beste Antwort für die Windows-Umgebung. Danke :)
Sykez
23

Legen Sie einfach die memory_limitAngabe der vollständigen Route Ihrer composer.phar-Datei fest und aktualisieren Sie sie, in meinem Fall mit dem folgenden Befehl:

php -d memory_limit=-1 C:/wamp64/composer.phar update
Aitor Fernandez
quelle
6
Funktioniert auch COMPOSER_MEMORY_LIMIT=-1 composer.phar update. Siehe: getcomposer.org/doc/articles/…
Mayid
5
auf Ubuntu benutze diesphp -d memory_limit=-1 /usr/bin/composer update
hinterhältig
COMPOSER_MEMORY_LIMIT = -1 Komponist funktioniert auch für mich .. @mayid Danke. : +1
Kishan Patel
19

Kürzlich wurde festgestellt, dass Composer bei Paketen mit vielen historischen Tags viel CPU + Speicher verbraucht. Siehe Komponist / Komponist # 7577

Eine Problemumgehung für dieses Problem ist die Verwendung von symfony/flexoder https://github.com/rubenrua/symfony-clean-tags-composer-plugin

composer global require rubenrua/symfony-clean-tags-composer-plugin
Ruben Gonzalez
quelle
Müssen Sie das Plugin nur global installieren? Sonst nichts zu tun? Könnten Sie bitte erklären, was dieses Plugin tatsächlich tut? Reduziert in solchen Fällen die Speichernutzung durch den Komponisten?
Rineez
17

Nur für den Fall, dass Sie einen Komponistenfehler erhalten mit:

Eingabedatei konnte nicht geöffnet werden: Composer

Lauf:

php -d memory_limit=-1 /usr/local/bin/composer require ...
Marcus Christiansen
quelle
13

Verwenden Sie zum Überspringen des Speicherlimits und des Versionsfehlers den folgenden Code:

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

Manchmal liegt das Problem in der Speicherbeschränkung des Komponisten. In meinem Fall habe ich versucht, das PHP-Speicherlimit zu erhöhen, aber trotzdem den Fehler erhalten. Sie können verwenden COMPOSER_MEMORY_LIMIT=-1, um das zu umgehen. Verwenden Sie es als Präfix:

COMPOSER_MEMORY_LIMIT=-1 composer require the/library

Sie müssen es in Zukunft erneut voranstellen.

Hoffe das hilft.

meow2x
quelle
11

Verwenden Sie für diesen Fehler in MacOs Catalina diese Zeile:

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

Ich habe diese Zeile verwendet, um Symfony 5 zu aktualisieren. Dieser Befehl funktionierte auch mit Laravel 7.

juanitourquiza
quelle
10

Ich habe das Problem in einer virtuellen Maschine von Homestead Laravel (Vagrant) umgangen, auf der die Composer-Befehle ausgeführt werden, denen Folgendes vorangestellt ist COMPOSER_MEMORY_LIMIT=-1:

Beispiele

So aktualisieren Sie Composer:

COMPOSER_MEMORY_LIMIT=-1 composer update

So installieren Sie ein Paket:

COMPOSER_MEMORY_LIMIT=-1 composer require spatie/laravel-translatable
Davide Casiraghi
quelle
Danke Alter! Wird es global aktualisiert oder nur für diesen bestimmten Befehl?
andcl
1
Nur eine vorübergehende Lösung für diesen speziellen Befehl.
Davide Casiraghi
Das war super hilfreich - danke!
Bretagne
8

Was ist mit Windows?

Ich benutze Windows 10 und dieser Befehl hat bei mir funktioniert.

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

Die Vorschau von Composer 2.0 ist ab sofort verfügbar: https://github.com/composer/composer/releases Problem für mich behoben. Sie können eine Vorschau mit einrichtencomposer self-update --preview

BEARBEITEN: Composer 2 mit freigegebener Speicheroptimierung

Anatoly Sokolov
quelle
5

Sie können eine bestimmte PHP-Version verwenden, wenn Sie Composer ausführen

Wenn Sie wie ich aus irgendeinem Grund 32-Bit-PHP verwenden , obwohl Ihr Computer 64-Bit hat, wird die dem Composer zugewiesene Speichermenge immer begrenzt. Ich habe mein Problem folgendermaßen gelöst:

  • Installieren Sie irgendwo auf Ihrem Computer eine 64-Bit-PHP-Version (sagen wir in C: / php64).
  • Führen Sie im Composer (in meinem Fall Cygwin) Folgendes aus:

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

Roubi
quelle
Dieser Vorschlag hat bei mir funktioniert! Vielen Dank. Beachten Sie, dass Sie auch die Systemumgebungsvariable aktualisieren müssen, um die neue 64-Bit-Version global verwenden zu können.
GentleGiant
5

Gleiches Problem, nichts im Zusammenhang mit "memory_limit" hat funktioniert, aber ..

composer self-update --2

.. löste mein Problem. (Upgrade: 1.10.17 -> 2.0.4)

Milla Sense
quelle
3

Ich möchte nur meine Situation in dieser Angelegenheit teilen.

Problemkontext:

  1. Laufender Komponist in einer Vagabundkiste.
  2. Erhielt diese Meldung nach dem Versuch, den Komponisten auszuführen, "laravel-doctrine / orm: ~ 1.4.13":

Schwerwiegender Fehler: Zulässige Speichergröße von 1610612736 Byte erschöpft (versucht, 4096 Byte zuzuweisen) in phar: ///usr/local/bin/composer/src/Composer/DependencyResolver/RuleWatchGraph.php in Zeile 52 Überprüfen Sie https: // getcomposer. org / doc / articles / Troubleshooting.md # Speicherlimitfehler für weitere Informationen zum Umgang mit Speicherfehlern.

  1. Habe versucht, das Speicherlimit von php.ini auf -1 zu setzen. (funktioniert immer noch nicht).

Lösung:

  1. Anscheinend haben meine composer.json und composer.lock einige Probleme. Ran $ composer validate und das Ergebnis war: "Die Sperrdatei ist nicht auf dem neuesten Stand der neuesten Änderungen in composer.json. Es wird empfohlen, dass Sie ausführen composer update."

  2. Also habe ich $ composer update ausgeführt und alle Abhängigkeiten wurden aufgelöst. Imho, wenn die Abhängigkeiten einige Probleme haben, ist die Baumbildung möglicherweise nicht synchron, daher das Problem mit nicht genügend Speicher.

Hoffe das hilft jemandem da draußen.

Steven Yip
quelle
3

in windows von xampp habe ich gerade geändert:

;memory_limit=512M 

in php.ini zu:

memory_limit =-1

Starten Sie dann den Apache mit xampp neu

das ist das Ergebnis:

; Maximum amount of memory a script may consume
; http://php.net/memory-limit
memory_limit =-1
;memory_limit=512M
Säbel tabatabaee yazdi
quelle
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.

setze memory_limit auf -1 funktioniert bei mir;) (vim /etc/php/7.2/cli/php.ini)

Ted Mosby
quelle
2

Um dies zu überschreiben und das Problem auf Ihrem lokalen Computer zu beheben, können Sie die folgenden Änderungen in Ihrer php.iniKonfigurationsdatei vornehmen .

  1. Um Ihre php.iniKonfigurationsdatei zu finden, können Sie den folgenden Befehl verwenden:php --ini

Nach dem Ausführen dieses Befehls sollte eine Ausgabe wie die folgende angezeigt werden:

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

Die Datei, die wir ändern möchten, ist die geladene Konfiguration .

  1. Öffnen und suchen Sie nach dem, das memory_limitSie einstellen können memory_limit = -1, um PHP-Prozessen eine unbegrenzte Menge an Speicher zu geben, oder Sie können einstellen512MB, 1G, 2G, 5G,....

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

lokalisieren und einstellen:

$ memory_limit = -1 or memory_limit = 1G
  1. Nach dem Speichern Ihrer Datei können Sie die PHP-Änderungen überprüfen, indem Sie diesen Befehl ausführen, der die aktuellen Speichereinstellungen in Ihrer php.iniDatei ausgibt :

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

HINWEIS: Nach dem Speichern funktioniert der neue Speicher. Sie müssen nichts anderes tun.

Weitere Informationen: https://support.acquia.com/hc/en-us/articles/360036102614-Overriding-memory-limits-during-local-development-with-Composer

Jose Seie
quelle
2

Für Macbook: Führen Sie den Befehl aus sudo nano ~/.bash_profile, um bash_profile zu bearbeiten, fügen Sie alias composer="COMPOSER_MEMORY_LIMIT=-1 composer"diese Datei hinzu, speichern Sie sie und beenden Sie sie .

Hoffe, dies wird das Problem lösen; Viel Spaß beim Codieren!

Prosanta Chaki
quelle
2

Auf Mac PHP 7.4

Lauf

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

Wenn zusätzliche INI-Dateien analysiert wurden: memory_limit muss in geändert werden

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

Stellen Sie, wie Jose Seie schreibt, den Speicher auf ein

memory_limit = -1 or memory_limit = 1G
Kalle Karlsson
quelle
1

Ich habe die nützliche und akzeptierte Antwort hier in wiederverwendbaren (zsh) Aliasnamen / Funktionen zusammengefasst oder verpackt, um eine schnellere und leichter zu merkende Wiederverwendung zu ermöglichen:

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

( php composer.pharist bereits composerauf dem System aliased ).

Emjayess
quelle
1

Ich habe dieses Problem mit diesem Befehl COMPOSER_MEMORY_LIMIT = -1 gelöst

Beispiel: COMPOSER_MEMORY_LIMIT = -1 Komponist benötigt Larve / UI

Faisal Ahmed
quelle
0

Hier ist eine andere Möglichkeit, dieses Problem unter Windows zu lösen, wenn Sie Wampserver verwenden. In der Tat gibt es auf der Ebene von wampserver zwei php.ini- Dateien, die von PHP, die man im Speicherort C finden kann: \ wamp64 \ bin \ php \ phpx.xx \ php.ini und die von Apache gefunden an Position C: \ wamp64 \ bin \ apache \ apachex.xx \ bin \ php.ini . Beide Dateien haben den Parameter memory_limit. Um dieses Problem zu lösen, ist es besser, den Parameter memory_limit = -1 in beiden Dateien gleichzeitig festzulegen .

Fidèle W. AVI
quelle
Das Festlegen des memory_limitfür den Webserver hat keine Auswirkungen auf die Ausführung von Composer. Darüber hinaus sollte die memory_limit = -1globale Verwendung die allerletzte Option sein, da dadurch alle laufenden PHP-Prozesse für die Speicherauslastung geöffnet werden. Stellen Sie es besser nur ein, wenn Sie es brauchen, direkt verbunden mit dem Startvorgang
Nico Haase
0

Stellen Sie sicher, dass Sie kein Paket benötigen, bevor Sie sicherstellen, dass der Herstellerordner vorhanden ist.

Überprüfen Sie, ob Sie dies bereits getan composer installhaben. Möglicherweise haben Sie das Repository nur auf Ihren Computer geklont. Sie müssen also die alten Pakete installieren, bevor Sie ein neues benötigen. Oder Sie möchten diese Option --profilein Ihren Composer-Befehl aufnehmen, um Informationen zum Timing und zur Speichernutzung anzuzeigen.

Saud Alfadhli
quelle
0

Für Centos7- Benutzer, wo php.iniist in/etc/php.ini/

  1. Führen Sie diesen Befehl aus sudo vi /etc/php.ini
  2. Geben Sie ein /memory_limit, um nach einer memory_limitVariablen zu suchen
  3. ändere es auf memory_limit = -1
  4. escTaste drücken und eingeben :wq(schreiben und beenden)
  5. Starten Sie dann Apache neu sudo systemctl restart httpd
Aamer Shahzad
quelle
1
in windows von xammp ändere ich einfach; memory_limit = 512M in php.ini zu memory_limit = -1
saber tabatabaee yazdi
Das globale Speicherlimit darf nicht deaktiviert werden, nur um Composer zu verwenden.
Emix
0

Ich benutze PHP7.2 und die Größe ist memory_limit = 512Mstandardmäßig eingestellt. Um die Größe zu erhöhen, müssen Sie suchen php.ini.

In Wampbefindet es sich in C:\wamp64\bin\php\php7.2.23\php.ini. Bitte achten Sie auf die PHP-Version, da es sich in meinem Fall um den Namensordner handeltphp7.2.23

In Laragonbefindet es sich in C:\laragon\bin\php\php-7.2.23-Win32-VC15-x64\php.iniwie in meinem Fall.

Wenn Sie keinen unbegrenzten Speicherplatz zulassen möchten, können Sie die für Sie geeignete Größe festlegen, in meinem Fall memory_limit = 2G

Wenn Sie unbegrenzten Speicherplatz zulassen möchten, können Sie zu wechseln memory_limit = -1

Chetam Okafor
quelle
0

Ich habe dieses Problem über php.ini gelöst und gerade memory_limit = 2G geändert

Rohit Malhi
quelle
0

Versuchen Sie, das Limit in Ihrer php.ini-Datei zu erhöhen (z. B. /etc/php5/cli/php.ini für Debian-ähnliche Systeme):

;; Verwenden Sie -1 für unbegrenzt oder definieren Sie einen expliziten Wert wie 2G memory_limit = -1

Mohammed Abir
quelle
1
Bitte duplizieren Sie keine vorhandenen Antworten, es sei denn, Sie haben etwas Neues hinzuzufügen
Nico Haase