Apache2-Speichernutzung beim Hochladen großer Dateien

Apache2-Speichernutzung beim Hochladen großer Dateien

Ich verwende Apache2.2.12 zusammen mit PHP 5.2.10. PHP ist so konfiguriert, dass es als separater Prozess über fcgid ausgeführt wird. Das Problem besteht darin, dass die Größe des Apache-Prozesses um fast den gleichen Betrag anwächst, wenn Benutzer eine Datei hochladen. Wenn also jemand versucht, eine 200 MB große Datei hochzuladen, wächst einer der untergeordneten Prozesse auf die aktuelle Größe + 200 MB an. Wenn 2 Benutzer gleichzeitig mit dem Hochladen beginnen, stürzt mein Server ab.

Jetzt nimmt die Größe des virtuellen Speichers zu, aber da ich einen VPS auf Basis von OpenVZ verwende, ist das das, was zählt.

Meine Fragen sind:

  • Ist das das normale Apache-Verhalten oder kann ich etwas tun, um das Problem zu beheben?
  • Wenn nicht, gibt es eine speichereffizientere Möglichkeit, große Datei-Uploads zu verarbeiten? Nach dem aktuellen Verhalten benötige ich 1 GB freien RAM für jedes Apache-Child, das einen Upload akzeptiert.

Danke!

Abhaya

-

Antwort1

Interessantes Problem, und es scheint eine Einschränkung von PHP zu sein. Siehe Folgendes:

Am Ende scheinen beide zu sagen: „Verwenden Sie Java oder Perl“ oder etwas anderes. Vielleicht hat jemand auf Stackoverflow die Antwort. Für Uploads dieser Größe ist SFTP möglicherweise die bessere Lösung, je nachdem, wie benutzerfreundlich es sein muss.

Wenn Sie bereit sind, nicht-PHP zu verwenden,JUploadsieht nach einer guten Option aus, da die Datei in Blöcke aufgeteilt und jeder Block auf die Festplatte übertragen werden kann. Wenn es PHP sein muss, können Sie mit etwas Socket-Programmierung möglicherweise etwas Benutzerdefiniertes erstellen, gemäßdieser Stackoverflow-Beitrag.

Bei dieser Größe möchten Sie wahrscheinlich sowieso etwas mit Fortsetzungs- und Fortschrittsfunktion.

verwandte Informationen