Die Sache mit dem Auslagern ist ziemlich komplex. Das können längst nicht alle Sprachen. Ich weiss ned ob es PHP kann, aber JAVA auf Windows z.B. schmeisst dir in der Default Einstellung einen Fehler um die Ohren wenn der RAM zu Neige geht (Heap Speicherfehler) und bricht ab. Ob PHP bei zu wenig RAM in die SWAP schreiben kann, weiss ich ned, obwohl es mich nicht wundern würde, wenn es das nicht könnte
PHP File Upload im Hauptspeicher
Einklappen
X
-
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten
[color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
-
Ach Muschle, das könnte so ein spannendes Problem sein, aber mit deiner ätzenden Art kannst du einem echt den Spass verderben.....
Kommentar
-
Original geschrieben von jahlives
Ob PHP bei zu wenig RAM in die SWAP schreiben kann, weiss ich ned, obwohl es mich nicht wundern würde, wenn es das nicht könnte
Also falls das mal jemand testen wollen würde, kann gern mal auf die schnelle einen test upload script liefern. Interessant wäre einfach, ob das evtl. nur ein Suse Problem ist.
Kommentar
-
Original geschrieben von muschle66
Dann hilf doch mal einem "Newbie" als "PHP Experte" anstatt nichtssagende und provozierende Posts loszutreten. Wäre doch mal ein Ansatz, oder?
Kommentar
-
Ich vermute mal, dass PHP nicht swappen kann und das wenn schon vom Server erledigt werden müsste.Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten
[color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Kommentar
-
Original geschrieben von unset
Dein Ansatz wäre erstmal, deine Behauptungen zu untermauern. Dein ursprungsproblem resultiert einfach aus dem Missbrauch des HTTP-Protokolls. Deine Behauptung steht erstmal ohne Belege in der Luft. Dannach sehen wir weiter.
Du erzählst puren quatsch, komplett am Thema und Problem vorbei, kannst du das mal lassen? Halt dich doch einfach raus hier und provozier nicht so.
Die biereinfache Sachlage ist, das php bei mir bei einem upload nicht swapped und das Zeug im Main Memory hält. Nicht mehr und nicht weniger. Was soll man da jetzt untermauern <Kopfschüttel>
Kommentar
-
Original geschrieben von jahlives
Ich vermute mal, dass PHP nicht swappen kann und das wenn schon vom Server erledigt werden müsste.
Kommentar
-
Ich würde das Speicherproblem nicht auf PHP schieben. In erster Instanz ist das Betriebssystem für die Speicherverwaltung verantwortlich. Ich denke, PHP fordert weiteren Speicher an. Entweder legt das OS eine entsprechende Auslagerungsdatei an oder verweigert weiteren Speicher. Ob das wirklich so abläuft, kann ich allerdings nicht sagen, würde ich so einschätzen.
Kommentar
-
Original geschrieben von onemorenerd
Welcher Webserver? Welche PHP-Version? mod_php? Mit APC?
PHP Version 5.2.5
Apache/2.2.3 (Linux/SUSE)
Apache 2.0 Handler
Zend Memory Manager: enabled
Produktivserver:
PHP Version: 5.2.6
Apache/2.2.3 (Linux/SUSE)
Apache 2.0 Handler
Zend Memory Manager: enabled
Kein APC
Kommentar
-
Original geschrieben von PHP-Desaster
Ich würde das Speicherproblem nicht auf PHP schieben. In erster Instanz ist das Betriebssystem für die Speicherverwaltung verantwortlich. Ich denke, PHP fordert weiteren Speicher an. Entweder legt das OS eine entsprechende Auslagerungsdatei an oder verweigert weiteren Speicher. Ob das wirklich so abläuft, kann ich allerdings nicht sagen, würde ich so einschätzen.
Was für Möglichkeiten würde es den noch geben zu testen ob php bei Speichermangel zu swappen anfängt?
Kommentar
-
Was vielleicht schon helfen würde, bevor der debug / compile Aufwand betrieben wird wäre ein kleiner Test auf nem anderen Betriebsystem ob es sich da ähnlich verhält. Das upload File muss nur grösser sein als der Hauptspeicher. Während des uploads mit vmstat den free Speicher im Auge behalten und wenn der bei null ist müsste der swap sich erhöhen. Und genau das tut er bei mir nicht.
Kommentar
-
Damit beobachtest du zwar das (systemspezifische) Verhalten, kommst der Ursache jedoch nicht auf die Spur und kannst das Verhalten folglich nicht ändern. Wenn du nur wissen willst, ob geswappt wird, dann teste. Wenn du wissen willst, warum bzw. warum eben nicht, bringt dir so ein Test überhaupt nichts.
Nichtsdestotrotz kann so ein Test Hinweise auf mögliche Ursachen liefern, die man dann gezielt untersuchen könnte. Meine Vermutung ist, dass der Apache solche Upload-Requests nicht komplett selbst abhandelt. Er wird wahrscheinlich nur die Header zu einem Struct verwursten, das er den Hook-Callbacks übergibt. Um den Request Body wird sich ein Modul kümmern müssen, z.B. CGI oder PHP. Und eine kurze Recherche ergab, dass PHP bisher alle Uploads erstmal in den RAM quetscht und bei Vollständigkeit ins upload_temp_dir rausschreibt. Das mag aus IO-Sicht schnell sein, aber wenn der Speicher nicht ausreicht, kann so der Request nicht vollständig empfangen werden. So siehts bei dir auch aus.
Ich konnte übrigens keinen Hinweis darauf finden, wie PHP es macht, wenn gleichzeitig mehrere Dateien (in einem Request) hochgeladen werden. Bestenfalls wird jede sofort bei Vollständigkeit rausgeschrieben. Kann aber auch sein, dass erst mal alle Files im Speicher liegen und wenn das letzte komplett ist, werden alle auf Platte verewigt. Sollte einzeln rausgeschrieben werden, könnte man sich evtl. mit einer clientseitigen Aufteilung der Datei helfen ... mit einem Applett. Anders wird man dem Problem nicht beikommen, denn man kann wohl weder Apache noch PHP umprogrammieren. Die einfachste Lösung, mehr RAM kommt ja wohl nicht in Frage, sonst hättest du schon ein paar Riegel nachgekauft.Zuletzt geändert von onemorenerd; 07.08.2008, 15:24.
Kommentar
-
Danke für das ausführliche Statement!
Ich habe die selbe Vermutung, nur mein Gedanke war, wenn PHP sich so verhält das es alle aktiven Uploads im Speicher hält, ist das ein granatenmässiger Designfehler. Auf der anderen Seite kann ich das nicht glauben, dass ich der einzige bin dem das auffällt und sich darüber Gedanken macht.
Das mit dem Speicher kaufen ist nicht die Lösung. Soviel Speicher kann man gar nicht reinstopfen, dass man da auf irgend einer kalkulierbaren sicheren Seite wäre. Und ich bezweifle, das das ein Load Balancer oder Cluster das ändert. Wobei das wohl mit Kannonen auf Spatzen geschossen wäre.
100erte Uploads belasten die Kiste nicht so tragisch, stellen die Kiste aber hin wenn das alles im Speicher gesammelt wird. Deshalb mein Ansatz "Designfehler". Wäre leicht zu beheben, wenn PHP die Uploads chunkweise (so wie es das ja auch macht) in das File schreiben würde und nicht gleichzeitig aus irgend einem Grunde auch noch im Hauptspeicher halten. Ich werde mich mal näher zu den Spezialisten wagen, in der general PHP Liste komme ich bis dato auch nicht richtig weiter.
Ich lass es euch wissen wenn ich einen Ansatz einer Antwort auf das Problem erhalte.Zuletzt geändert von muschle66; 07.08.2008, 17:47.
Kommentar
Kommentar