arbeitsspeicher auf webserver
seth
- php
gudn tach!
bei einem webhoster steht bei den verschiedenen paketen dabei, wieviel ram php zur verfuegung gestellt wird. je nach webhost-paket sind's mal 8 MB, mal 16 MB oder noch mehr.
ich habe jedoch keinen schimmer, wieviel ram php normalerweise so auf einem webserver frisst. wenn ich auf meiner kiste unter windows 2000 mal eine php-generierte 150 kB-seite lade, sagt mir der taskmanager, dass der apache kurzzeitig fast 600 kB ram mehr frisst. aber was davon frisst php? das meiste? wuerde das bedeuten, dass das gleiche skript auf einem webserver, wenn es von 20 leuten gleichzeitig aufgerufen wird, die 8-MB-grenze ausreizen wuerde? (zusatzfrage: waere es sinnvoller, eine solche seite, wenn sie keinen vom benutzer abhaengigen inhalt hat, statisch abzulegen? hmm, *ueberleg* die antwort darauf kann ich mir wohl selbst geben: ja!)
konkret: was kann ich mit diesen zahlen fuer den php-arbeitsspeicher anfangen?
prost
seth
Hello,
konkret: was kann ich mit diesen zahlen fuer den php-arbeitsspeicher anfangen?
ich kann dir gerade nicht viel weiter helfen, wie sich der Speicherbedarf deines "normalen" Skripts berechnet. Aber ein Beispiel, bei dem Skripte gerne an ihre Grenzen stoßen, ist resizen, rotieren, zuschneiden etc. von Bildern mit irgendwelchen PHP-Funktionen. Dabei muss das Bild evtl. dekompremiert und/oder umgerechnet werden, wodurch aus einem gewöhnlichen 1MB JPEG schnell eine riesige Datenmenge werden kann.
MfG
Rouven
ich habe jedoch keinen schimmer, wieviel ram php normalerweise so auf einem webserver frisst. wenn ich auf meiner kiste unter windows 2000 mal eine php-generierte 150 kB-seite lade, sagt mir der taskmanager, dass der apache kurzzeitig fast 600 kB ram mehr frisst. aber was davon frisst php?
Wir haben es nur mit Perl beobachtet, aber es werden doch wohl auch unter PHP einzelne PHP-Prozesse gestartet. Sind ja Scripte.
Und wenn Du _diese_ Prozesse beobachtest (die ausserhalb des Apaches laufen sollten, denn dieser stösst die genannten Prozesse nur an), dann wirst Du sehen, dass da schnell einige MB zusammenkommen pro Prozess. Insofern können wir auch mit den genannten MB-Zahlen der Provider wenig anfangen. Wüsste auch nicht, wie das genau verwaltet werden kann. Eventuell ist das auch teilweise Marketing. LOL
das meiste? wuerde das bedeuten, dass das gleiche skript auf einem webserver, wenn es von 20 leuten gleichzeitig aufgerufen wird, die 8-MB-grenze ausreizen wuerde?
20 Prozesse dürften das locker schaffen. Aber 20 Prozesse sind viel.
(zusatzfrage: waere es sinnvoller, eine solche seite, wenn sie keinen vom benutzer abhaengigen inhalt hat, statisch abzulegen? hmm, *ueberleg* die antwort darauf kann ich mir wohl selbst geben: ja!)
;)
konkret: was kann ich mit diesen zahlen fuer den php-arbeitsspeicher anfangen?
Die Frage lautet erst einmal: Kann mans glauben?
Hello,
[...] aber was davon frisst php? das meiste? wuerde das bedeuten, dass das gleiche skript auf einem webserver, wenn es von 20 leuten gleichzeitig aufgerufen wird, die 8-MB-grenze ausreizen wuerde?
Wenn PHP als Modul geladen ist, bezeichnet diese Grenze den maximalen Speicherplatz pro Sub-Prozess. Wenn also ein Besucher die Seite "betritt", und der Webserver stellt fest, dass er parsen soll, dann erzeugt er eine Instanz des PHP-Interpreters, lädt das Script und führt es aus. Hierfür hat er dann z.B. 8MB zur Verfügung.
Interessant wäre es hier, wie die Verwendung von "Heap" und "Stack" verwaltet werden.
Funktionen werden üblicherweise auf dem Stack ausgeführt und nach Abarbeitung wieder beseitigt. Da PHP-Funktionen während der Laufzeit dynamisch gebunden werden, benötigen sie also auch immer nur zur Laufzeit Speicherplatz. Es wird also erst dann eine Instanz der Funktion gebildet, wenn sie benötigt wird. Dauerhaft Platz benötigt also nur der Funktionskopf nebst Parametern, denn der steht in Deinem eigenen Script.
Wenn Du nun viel mit vorbereiteten Klassen arbeitest, gehören diese (deren Prototyp) also auch zum eigenen Speicherverbrauch. Es ist daher immer günstiger, fertige PHP-Funktionen zu verwenden, als alles selber neu zu erfinden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Wenn PHP als Modul geladen ist, bezeichnet diese Grenze den maximalen Speicherplatz pro Sub-Prozess. Wenn also ein Besucher die Seite "betritt", und der Webserver stellt fest, dass er parsen soll, dann erzeugt er eine Instanz des PHP-Interpreters, lädt das Script und führt es aus. Hierfür hat er dann z.B. 8MB zur Verfügung.
Meinst Du, dass die Obergrenze von bspw. 8MB für den singulären PHP-Prozess gilt und nicht für das Prozessrudel?
Hello,
Meinst Du, dass die Obergrenze von bspw. 8MB für den singulären PHP-Prozess gilt und nicht für das Prozessrudel?
Die Obergrenze gilt für den einzelnen Prozess.
Üblicherweise wird durch jeden Request nur einer ausgelöst. Ausnahmen (Worker ...) gibts natürlich. Die sind aber eben nicht üblich.
Es wird bei einem Request aber nicht das gesamte PHP neu in den Speicher geladen, sondern nur ein "abgemagertes" Child, das dann die benötigten Funktionen beim Mutterprozess anfordert, wenn sie benötigt werden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
ich glaube Dir gerne alles, aber es ist schon etwas merkwürdig, dass bspw. ein aus 100 Elementen bestehendes Prozessrudel CPU-Zeit noch und nöcher fressen dürfen, aber ein einzelner Prozess (der gerade viellicht auf eine vertikal ungefilterte Datensatzmenge gelaufen ist ;) - wenn wir richtig verstanden haben - gekillt wird.
gudn tach!
danke fuer eure antworten.
ich werde dann wohl einfach erstmal die 8 MiB ausprobieren.
prost
seth