Speicherlimit für Composer-Updates

85

Ich muss das Composer-Update auf meinem Hosting ausführen, damit ich mich mit ssh anmelde und versuche, comand auszuführen:

composer update

inside / www Ordner, in dem ich Laravel und Komponisten installiert habe

aber ich bekomme Fehler: Geben Sie hier die Bildbeschreibung ein

In Kontakt mit meinem Hosting-Anbieter fordern sie mich auf, den Befehl auszuführen:

php -d memory_limit=512M composer update

Ich führe diesen Befehl aus, erhalte aber Folgendes: "Datei konnte nicht geöffnet werden: Komponist"

Was ist zu tun? Was ist die Lösung hier?

Andrew
quelle
2
Wie @Sven sagte, ist in der Produktion composer installgenug. In Ihrem Fall, während Sie ein Shared Hosting verwenden, werden Sie wahrscheinlich nicht composer updatearbeiten. Der einzige Weg ist also, ein VPS-Hosting wie Digital Ocean, Linode zu kaufen.
Lucas Silva

Antworten:

131

Wenn Sie ausführen composer update, überprüft das Betriebssystem die konfigurierten Pfade und versucht, eine ausführbare Datei mit diesem Namen zu finden.

Während der Ausführung php composer updatewird die composerZeichenfolge als Parameter für PHP behandelt, der in keinem Pfad durchsucht wird. Sie müssen den vollständigen Pfad angeben, um ihn ausführen zu können.

Wenn Sie ausgeführt which composerwerden, erfahren Sie, wo das Betriebssystem die ausführbare Composer-Datei findet, und verwenden dann einfach den vollständigen Pfad im PHP-Befehl:

$>which composer
/usr/local/bin/composer

$>php -d memory_limit=512M /usr/local/bin/composer update
...

Beachten Sie, dass 512 MB möglicherweise zu wenig sind. Ich gehe davon aus, dass 1 GB oder mehr benötigt werden, abhängig von der Anzahl der verwendeten Abhängigkeiten und der Vielzahl der Versionen, die Sie theoretisch zulassen. Wenn Sie also Symfony zulassen ~2.3, lässt Composer im Vergleich zur Verwendung viel mehr mögliche Versionen verarbeiten ~2.7.

Beachten Sie auch, dass das Ausführen von Composer auf der Produktionsmaschine nicht die beste Idee ist. Sie müssten Zugriff auf Github haben, möglicherweise Zugriffsdaten angeben, VCS-Tools installiert haben und Ihre Site leicht beschädigen, wenn einer der Remote-Hosting-Server während Ihres Updates offline ist. Es ist besser, Composer auf einem Bereitstellungssystem zu verwenden, das die gesamte Vorbereitung durchführt und dann alle Dateien auf den Produktionsserver verschiebt.

Aktualisieren

Es ist jetzt das Jahr 2020 und die Art und Weise, wie Composer sein Gedächtnis verwaltet, hat sich ziemlich verändert. Das Wichtigste ist, dass Composer das Speicherlimit von selbst erhöht, wenn es auf ein zu niedriges Limit stößt. Dies löst jedoch sofort das Problem aus, dass auf Computern mit zu wenig installiertem Speicher nicht genügend Arbeitsspeicher vorhanden ist. Sie können Composer dazu bringen, weniger Speicher zu verwenden, indem Sie die Umgebungsvariable wie COMPOSER_MEMORY_LIMIT=512Mfestlegen. Dies führt jedoch zu Problemen, wenn Composer mehr Speicher benötigt, um ordnungsgemäß zu funktionieren.

Mein Hauptpunkt bleibt wahr: Führen Sie Composer nicht auf Computern aus, auf denen zu wenig Speicher installiert ist. Sie benötigen möglicherweise 1,5 GB freien Speicher, um alles aktualisieren zu können.

Sven
quelle
Ich wite nur: php -r "readfile (' getcomposer.org/installer' );" | PHP und danach funktioniert alles gut ... auch als Hilfe
Andrew
34
php -d memory_limit=-1 $(which composer) updateDies ist bequemer, da kein Composer-Pfad angegeben werden muss.
Rax
1
Das ist toll. Ich wusste nicht, dass Sie den Speicher für einen einzelnen Befehl erweitern können. Das macht das richtig?
plushyObject
wie in Windows?
Ray
1
@Rax noch eine Sache, wenn Sie diesen Befehl in Windows auf Mingw ausführen, dann erhalten Sie eine Fehlermeldung, dass der Pfad übersetzt werden muss. Verwenden Sie diesen Befehlphp -d memory_limit=-1 $(which composer).phar update
Faizan
141

Stellen Sie so ein, dass so viel Speicher verwendet wird, wie Sie möchten:

COMPOSER_MEMORY_LIMIT=-1 composer update
Diamondsea
quelle
Wie können wir diesen Wert oder einen beliebigen Wert global festlegen? anstatt dies jedes Mal über CLI tun zu müssen?
snh_nl
@snh_nl Sie müssen das PHP-Speicherlimit festlegen. Beispiel: kapitelthree.com/blog/how-fix-composer-memory-issue
jasonflaherty
2
Definieren Sie es global in Ihrem / etc / profile (oder einer beliebigen Shell, die Sie verwenden) mit COMPOSER_MEMORY_LIMIT=-1; export COMPOSER_MEMORY_LIMIT. Oder definieren Sie es als Shell-Alias? alias memcomposer='COMPOSER_MEMORY_LIMIT=-1 composer', dann memcomposeranstelle voncomposer
diamondsea
Es heißt immer nochFatal error: Allowed memory size of 2147483648 bytes exhausted (tried to allocate 4096 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleWatchGraph.php on line 52
Ozan Kurt
15

Ich habe Probleme mit dem Komponisten, weil er den gesamten verfügbaren Speicher belegt und der Prozess dann abgebrochen wird (tatsächlich lautet die Ausgabemeldung "Killed").

Daher suchte ich nach einer Lösung, um die Speichernutzung des Komponisten zu begrenzen.

Ich habe es versucht (von @Sven Antworten)

$ php -d memory_limit=512M /usr/local/bin/composer update

Aber es hat nicht funktioniert, weil

"Composer erhöht intern das memory_limit auf 1,5 G."

-> Das ist von der offiziellen Website des Komponisten.

Dann habe ich einen Befehl gefunden, der funktioniert:

$ COMPOSER_MEMORY_LIMIT=512M php composer.phar update

Trotzdem, in meinem Fall sind 512 MB nicht genug!

Quelle: https://www.agileana.com/blog/composer-memory-limit-troubleshooter/

Diego Favero
quelle
1
Ich musste den Composer wie folgt verwenden: COMPOSER_MEMORY_LIMIT = 1024M Composer benötigt 'module'
jasonflaherty
1
Ähnlich habe ichCOMPOSER_MEMORY_LIMIT=-1 composer require <package name>
Realtebo
12

Ich musste kombinieren COMPOSER_MEMORY_LIMITund memory_limitin der Kommandozeile:

Unter Windows:

set COMPOSER_MEMORY_LIMIT=99999999999&& php -d memory_limit=-1 composer.phar update

Unter Linux:

export COMPOSER_MEMORY_LIMIT=99999999999 && php -d memory_limit=-1 composer.phar update
Gerfried
quelle
Dies ist die einzige, die unter Mac OS X El Capitan für mich funktioniert hat.
ymd_
Arbeitete für mich, danke
Sayydika
8

Wenn genügend Speicher vorhanden ist, würde Composer ihn intern verbrauchen und problemlos ausführen. Sie müssen den Komponisten nicht ausdrücklich dazu auffordern.

Haben Sie versucht, Ihr Swap-Gedächtnis zu vergrößern, weil es bei mir funktioniert hat? Ich habe den Swap-Speicher auf 4096 MB (4 GB) erhöht und jetzt sieht alles für mich großartig aus.

Verwenden Sie zuerst " sudo free", um den verfügbaren Speicher anzuzeigen und den Speicher auszutauschen. und konfigurieren Sie Swap als,

Für Debian:

sudo fallocate -l 4G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=4096k count=1048
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Um es dauerhaft zu machen, fügen Sie dies der Datei / etc / fstab hinzu. /swapfile swap swap defaults 0 0

Für CentOS:

[root@myserver]:/# cd /var
[root@myserver]:/var# touch swap.img
[root@myserver]:/var# chmod 600 swap.img
[root@myserver]:/var# mkswap /var/swap.img

[root@myserver]:/var# dd if=/dev/zero of=/var/swap.img bs=4096k count=1000
[root@myserver]:/var# mkswap /var/swap.img 
[root@myserver]:/var# swapon /var/swap.img

Sie können Ihren Swap-Speicher erhöhen, indem Sie bs = 1024k oder 2048k oder 8096k ändern, abhängig von Ihrer physischen Volume-Größe. Verwenden Sie die Befehle 'swapon' und swapoff, um den Unterschied zu erkennen.

Überprüfen Sie 'Swappiness' (60 sollte gut tun,)

cat /proc/sys/vm/swappiness
Cosmo Arun
quelle
4

Sie können den memory_limitWert in Ihrer php.ini ändern

Versuchen Sie, das Limit in Ihrer php.ini-Datei zu erhöhen

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

memory_limit = -1

Hinweis: Composer erhöht intern das memory_limit auf 1,5 G.

Lesen Sie die Dokumentation getcomposer.org

Vladimir Salguero
quelle
3

Auf MAC OS High Siera habe ich Folgendes ausgeführt:

MacBook-Pro:asiu jack$ php --ini

Ist zurückgekommen:

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

Alle obigen Antworten legen die geladene Konfiguration fest, die aktualisiert wird. Beachten Sie jedoch, dass zusätzliche analysierte INI-Dateien die Datei php-memory-limit.ini als separate Datei enthalten. Sie müssen auch dieses Dateispeicherlimit aktualisieren. Öffnen Sie den Text im Texteditor und wechseln Sie zu 2G. Die Ausgabe bei einem Fehler bei der Speicherbegrenzung sollte Ihnen mitteilen, wie viel Speicher ausgeführt werden muss. Setzen Sie ihn einfach auf "höher" oder "-1" für unbegrenzt.

MadJack
quelle
2

Dieser Fehler kann insbesondere auftreten, wenn Sie große Bibliotheken oder Bibliotheken mit vielen Abhängigkeiten aktualisieren. Komponist kann ziemlich speicherhungrig sein.

Stellen Sie sicher, dass Ihr Komponist selbst auf die neueste Version aktualisiert ist:

php composer.phar --self-update

Sie können das Speicherlimit für Composer vorübergehend erhöhen, indem Sie die Umgebungsvariable für das Composer-Speicherlimit hinzufügen:

COMPOSER_MEMORY_LIMIT=128MB php composer.phar update

Verwenden Sie das Format "128M" für Megabyte oder "2G" für Gigabyte. Mit dem Wert „-1“ können Sie das Speicherlimit vollständig ignorieren.

Eine andere Möglichkeit wäre, das PHP-Speicherlimit zu erhöhen:

php -d memory_limit=512M composer.phar update ...
Snigdha Sambit Aryakumar
quelle
2

Die beste Lösung für mich ist

COMPOSER_MEMORY_LIMIT=-1 composer require <package-name>

erwähnt von @realtebo

Roman Grinev
quelle
1

Wie groß ist Ihr aws-Server? Wenn es nur 1 GB RAM hat, hilft es nicht, das Speicherlimit von 2 GB in der php.ini festzulegen.

Wenn Sie die Serverseite nicht vergrößern können / wollen, um mehr RAM zur Verfügung zu haben, können Sie auch SWAP aktivieren.

Hier erfahren Sie, wie Sie den Swap aktivieren. Es ermöglicht 4 GB, obwohl ich normalerweise nur 1 GB selbst mache.

Quelle: Von Laracast Site erhalten

Rem
quelle
0

In meinem Fall hat keine der Antworten geholfen. Schließlich stellte sich heraus, dass der Wechsel zu einer 64-Bit-Version von PHP (M $ Windows) das Problem sofort behebt. Ich habe keine Einstellungen geändert - es hat einfach funktioniert.

Gerfried
quelle
0

Ich habe das auf Widnows 10 gemacht und mit mir gearbeitet:

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

Sie können den gewünschten xx- Wert ändern

 memory_limit=XX
Tawfeeq Amro
quelle
0

Ich verwende Laravel 6 mit Homestead und bin auch auf dieses Problem gestoßen. Wie hier in den anderen Antworten vorgeschlagen, können Sie COMPOSER_MEMORY_LIMIT=-1einem einzelnen Befehl ein Präfix voranstellen und den Befehl normal ausführen. Wenn Sie Ihre PHP-Konfiguration aktualisieren möchten, um immer unbegrenzten Speicherplatz zuzulassen, führen Sie die folgenden Schritte aus.

vagrant up
vagrant ssh
php --version # 7.4
php --ini # Shows path to the php.ini file that's loaded
cd /etc/php/7.4/cli # your PHP version. Each PHP version has a folder
sudo vi php.ini

Fügen Sie memory_limit=-1Ihrer php.ini-Datei hinzu. Wenn Sie Probleme mit der Verwendung von Vim haben oder Änderungen an der Datei php.ini vornehmen, lesen Sie in dieser Antwort nach, wie Sie die Datei php.ini mit Vim bearbeiten. Die Datei sollte ungefähr so ​​aussehen:

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

Beachten Sie, dass dies unendlich viel Speicher auf Ihrem Computer verbrauchen kann. Wahrscheinlich keine gute Idee für die Produktion lol. Mit Laravel musste Valet diesem Artikel folgen und den Speicherwert hier aktualisieren:

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

Starten Sie dann den Server mit Valet neu:

valet restart

Diese Antwort war auch hilfreich, um die Konfiguration mit Laravel Valet auf dem Mac zu ändern, damit die Änderungen wirksam werden.

Connor Leech
quelle
0
<C:\>set COMPOSER_MEMORY_LIMIT=-1
<C:\>composer install exhausted/packages
Digitaler Mensch
quelle
3
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können
Nico Haase
0
  • Gehen Sie zu Ihrer php iniDatei
  • einstellen memory_limit = -1
Dinush Chathurya
quelle
0

Für Laravel

Schritt 1. Öffnen Sie Ihr Terminal

Schritt 2. cdin Ihr Laravel-Verzeichnis

Schritt 3. which composerGeben Sie den Befehl in Ihr Laravel-Verzeichnis ein und notieren Sie das Verzeichnis, in dem sich der Composer befindet.

Schritt 4. Führen Sie den Befehl aus php -d memory_limit=-1 /opt/cpanel/bin/composer update(Sie können den Code auch ausführen, wenn er für Sie funktioniert).

(Wechseln Sie /opt/cpanel/bin/composerin den in Schritt 3 zurückgegebenen Verzeichnispfad.)

Problem gelöst

Obot Ernest
quelle
-1

In meinem Fall waren höhere Berechtigungen zusammen mit dieser Erhöhung des Speicherlimits erforderlich.

sudo COMPOSER_MEMORY_LIMIT=2G php /opt/bitnami/php/bin/composer.phar update
Naser Nikzad
quelle
Das Ausführen von Composer mit sudoist keine gute Idee, da dadurch Ihre Berechtigungen verwechselt werden. Dies sieht so aus composer update, als würden Sie auf einem Server ausgeführt - dies ist auch eine schlechte Praxis, da es viel anders wird, die berechneten Abhängigkeiten unter Versionskontrolle zu stellen
Nico Haase
Stimmen Sie mit @NicoHaase überein, Sie müssen so vorsichtig damit umgehen! Vielen Dank.
Naser Nikzad