PHP File Upload im Hauptspeicher

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    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
    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


    • #17
      Ach Muschle, das könnte so ein spannendes Problem sein, aber mit deiner ätzenden Art kannst du einem echt den Spass verderben.....
      Wir werden alle sterben

      Kommentar


      • #18
        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
        Das hab ich mir auch schon gedacht. Obwohl ich das kaum glauben kann wenn man mal die Vielzahl an (auch grossen) Websites sieht die den php upload verwenden. Falls das wirklich so wäre, wäre das ne ziemliche Unzulänglichkeit von PHP. Vor allem macht mich stutzig, dass dazu so wenig Infos zu finden sind. An dem Problem häng ich nun schon ne ganze Weile. Trotz intensiver google recherchen lässt sich da irgendwie nichts handfestes finden wie sich das verhält / verhalten sollte. Hab jetzt auch mal in der PHP Mailingliste angefragt. mal sehen obs da jemand gibt der da was bestätigen / dementieren kann.


        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


        • #19
          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?
          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.
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #20
            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


            • #21
              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


              • #22
                Original geschrieben von jahlives
                Ich vermute mal, dass PHP nicht swappen kann und das wenn schon vom Server erledigt werden müsste.
                Dem Ansatz bin ich schon nachgegangen. Die http Prozesse verändern sich nicht während des Uploads. Für mich ein indiz, das PHP den Speicher in diesem Moment verwaltet.

                Kommentar


                • #23
                  Welcher Webserver? Welche PHP-Version? mod_php? Mit APC?

                  Kommentar


                  • #24
                    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


                    • #25
                      Original geschrieben von onemorenerd
                      Welcher Webserver? Welche PHP-Version? mod_php? Mit APC?
                      Auf Entwicklungsserver:
                      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


                      • #26
                        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.
                        Könnte ich mir auch vorstellen, aber ich habe keinen Ansatz wie ich das prüfen könnte. Am swap kann man ja nicht viel drehen(?), er ist da oder nicht denk ich mal. Auf den Kisten ist der swap so um die zwei GB (Standard Einstellung, nichts verändert).

                        Was für Möglichkeiten würde es den noch geben zu testen ob php bei Speichermangel zu swappen anfängt?

                        Kommentar


                        • #27
                          Original geschrieben von muschle66
                          Was für Möglichkeiten würde es den noch geben zu testen ob php bei Speichermangel zu swappen anfängt?
                          Apache und PHP mit Debug Flag kompilieren, ein Upload Script schreiben und dann drauf los tracen. Leider fehlt mir grad die Zeit dazu.

                          Kommentar


                          • #28
                            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


                            • #29
                              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


                              • #30
                                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

                                Lädt...
                                X