PHP-CLI berücksichtigt keine Speicherbegrenzung in php.ini

8921
user13743

Ich verwende drush, eine Befehlszeilen-PHP-App zur Verwaltung einer Drupal-Website. Ich führe einen Befehl aus, um viele Daten zu importieren, was dazu führt, dass ich das Speicherlimit von php erreicht.

PHP Fatal error: Allowed memory size of 536870912 bytes exhausted ... 

Welches sind 512 MB, wenn ich die Mathematik richtig mache (536870912/1024/1024 = 512). Ich habe die Direktive in der php.ini geändert, die drush verwendet:

$> drush status ... PHP configuration : /etc/php5/cli/php.ini  $> grep memory /etc/php5/cli/php.ini  ; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit = 1024M  

Aber ich bin immer noch am Limit von 512 MB! Ich verwende eine virtuelle Maschine, deren Speichereinstellungen ich von 512 auf 1025 MB RAM geändert habe, um das Ausführen von Drush zu ermöglichen.

$> free -m total used free shared buffers cached Mem: 1010 578 431 0 14 392 -/+ buffers/cache: 172 837 Swap: 382 0 382 

So heißt es, dass es 431 MB frei hat, jetzt, da ich die VM auf 1024 erhöht habe. Ich denke, die Hälfte des Speichers wird zum Ausführen der GUI verwendet, aber ich verstehe nicht, wie die GUI lief, wenn die VM läuft hatte 512 MB RAM.

Warum erreicht der PHP-Cli immer noch eine Speichergrenze von 512 MB? Wenn es an eine Systemspeichergrenze stößt, sollte es nicht bei 431 MB liegen, was freesagt der Befehl als verfügbar?

4
Sie verwechseln virtuelle Speichergrenzen mit physischen Speichergrenzen. Die PHP-Speichergrenze ist eine virtuelle Speichergrenze. Die Ausgabe von "free" ist alles physikalische Gedächtnis. Sie haben auch einen Fehler, wenn Sie die Hälfte des Arbeitsspeichers verwenden, um die GUI auszuführen. Der Speicher wird weitgehend für Puffer und Cache verwendet. Das System hat sich einfach nicht die Mühe gemacht, es freizugeben, da es bereits genügend freien Speicher hat, so dass es unnötig Mühe wäre. David Schwartz vor 11 Jahren 0
Wahrscheinlich haben Sie mehr als eine `php.ini'-Datei (überprüfen Sie etwas wie` / etc / php5 / cli`) und bearbeiten die falsche oder Sie haben ein `ini_set ('memory_limit', '512M');` Einstellung in einer `settings.php`-Datei oder dergleichen, die enthalten ist. David Schwartz vor 11 Jahren 1
@David - Ich hatte ein zusätzliches ini_set () in der Coedbase vom Code zur Fehlerbehebung. Wenn Sie diese Antwort posten, werde ich sie bestätigen und akzeptieren. user13743 vor 11 Jahren 0

3 Antworten auf die Frage

5
David Schwartz

Höchstwahrscheinlich haben Sie mehr als eine php.ini-Datei (überprüfen Sie etwas /etc/php5/cli) und bearbeiten die falsche oder Sie haben eine ini_set('memory_limit', '512M');Einstellung in einer settings.phpDatei oder dergleichen, die enthalten ist.

1
A.Maksymiuk

Für andere Personen, die diese Frage wie mich googeln, führen Sie den folgenden Befehl aus:

php --ini 

Um zu sehen, welche Konfiguration php-cli verwendet. Sie werden so etwas sehen:

Loaded Configuration File: /etc/php/7.1/cli/php.ini 

Oder so:

Loaded Configuration File: /opt/php-7.0.26/etc/php.ini 

Möglicherweise versuchen Sie, die Konfiguration in einer falschen Datei zu ändern.

0
espaciomore

in Mac zum Beispiel

/etc/php5/cli ist für die Befehlszeile, daher müssen Sie /etc/php5/cgi/php.ini ändern

das sollte funktionieren !