Für ein paar Bytes zu gewinnen, könnten Sie Ihren PHP-Code einfach in einer sauberen Umgebung laufen:
env -i php -r 'var_dump(memory_get_peak_usage()); var_dump($GLOBALS);'
Die env -i
starten das Skript in einer sauberen Umgebung. Sie können den Unterschied sehen, indem Sie die $GLOBALS
dumping. Die Funktion memory_get_peak_usage()
zeigt den maximal belegten Speicher für das Skript an. Aber auf meinem System erhalte ich mit dieser Methode nur ein paar KB. Es hängt von Ihren Umgebungsvariablen ab.
Für eine echte Optimierung des Speicherbedarfs müssen Sie in Ihre verwendeten Erweiterungen suchen. Um Ihre Nebenpfad zu erhalten, führen Sie einfach ein Skript wie folgt aus:
php -r 'var_dump(ini_get("extension_dir"));'
Sie wahrscheinlich einige Erweiterungen wie diese finden:
curl.so
gd.so
json.so
[...]
Dies sind die Erweiterungen, die Sie dynamisch mit dl laden kann(). Sie kommen nicht in Ihren Speicherverbrauch. Aber wenn man so will jede Erweiterung um zu sehen, durch das System geladen, können Sie den folgenden Befehl verwenden:
php -m
diese Listen vergleichen, werden Sie feststellen, es gibt viel mehr Erweiterung zur Verfügung. Diese sind in PHP kompiliert. Um einen geringeren Speicherbedarf zu haben, müssten Sie PHP aus der Quelle kompilieren.
Um PHP zu optimieren, müssen Sie in Ihren Code schauen, welche Erweiterungen Sie benötigen. Die richtigen Optionen für ./configure zu erhalten ist eine zeitraubende Aufgabe. Für den Anfang finden http://www.php.net/manual/de/configure.about.php
Normalerweise, wenn Sie eine bestimmte Erweiterung benötigen, können Sie mit der PHP-Handbuch und werfen Sie einen Blick in den Installationsabschnitt für die Verlängerung gehen würde, für zlib, wäre dies zum Beispiel http://php.net/manual/de/zlib.installation.php
Für Ihr spezifisches Beispiel sollten Sie versuchen, PHP aus der Quelle ohne Optionen zu kompilieren und zu testen, ob es Ihren Anforderungen entspricht.
Vielen Dank für die Antwort, aber das ist nicht, was ich suche. Selbst wenn keine Erweiterungen geladen oder kompiliert werden, wird das Ausführen des Skripts, das ich gepostet habe, aufgrund des Bootstrapping-Prozesses, den PHP durchläuft, ziemlich viel Speicher in Anspruch nehmen. Was ich mich wundere, sind Dinge wie die Verwendung von 'get_defined_vars()' und das Deaktivieren von ihnen, so dass die interne Symboltabelle freigegeben wird, offene Streams erhält und sie usw. schließt. – user2601913
Ich fürchte, dass die Sache, die Sie im Sinn haben, keine Unterschiede machen wird. Im Vergleich zu den Modulen sollte der Unterschied in der Speichernutzung gering sein. Wenn du es dir genauer ansehen möchtest, benutze "php -r 'sleep (1000)", benutze "ps" um die PID zu erhalten und benutze dann Tools wie "lsof" und "pmap". – Trendfischer
Das ist, worum diese Frage geht, um herauszufinden, was andere Leute über die Speichernutzung wissen, wenn sie den PHP-Prozess starten. Ich habe die Speicherbelegung bereits mit valgrind gemessen und Erweiterungen/Code erkannt, die am häufigsten Speicher verwenden. Ich möchte alles bis auf das letzte Byte abschneiden (ich weiß, dass das nicht möglich ist, aber wir Programmierer versuchen es immer). Das Beispiel, das ich mit 'get_defined_vars()' bereitgestellt habe, war nur ein Hinweis darauf, was ich gerne tun würde. Wenn Sie neben der Entfernung der Erweiterung noch etwas wissen, lassen Sie es mich wissen. – user2601913