Ron: Webhosting / Arbeitsspeicher

Hallo Allesamt,

Ich bräuchte mal einen Rat.

Ich beschreibe mal einfach mein Problem.

Ich habe einen neuen Kunden.
Dieser hat ein Webprojekt.
User können Bilder hochladen und die bedrucken dann ihre Produkte und verschicken diese.
Das ganze ist mit PHP/MySQL realisiert.

Probleme bereiten folgende Punkte.

  • Bilder-Upload: Es wird ein Thumbnail des Bildes erstellt.

  • AUftrag wird verzippt. D.h. Alle Bilder und ein Worddokument mit dem/n Auftrag/ägen werden in einen Ordner verzippt, der dann heruntergeladen werden kann.

Realisiert hat das ganze ein anderer, ich habe das Projekt nur übernommen und optisch ansprechend gestaltet, ohne an den PHP/MYSQL-Funktionen etwas zu verändern. Das ganze kam dann auf einen neuen Server, zu einem anderen Webhoster.

Das Produkt das die User bestellen können, wird natürlich um so besser je höher die Auflösung des Bildes und somit auch je höher die Dateigrösse.

Die User können Bilder bis zu 250 MB hochladen. Wobei die meisten doch 1 - 10 MB hochladen.

Probleme gibt es jetzt andauernd mit dem verzippen, oder mit dem Bestellvorgang selbst. Es scheint so, als gäbe es Probleme mit der Grösse des Arbeitsspeichers. Es taucht folgende Fehlermeldung auf.

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 36400388 bytes) in.....

So wie ich das verstehe, brauche ich doch um möglichst viele eventualitäten zu berücksichtigen einiges mehr an Arbeitsspeicher.

Wenn nun jemand 3 Bilder a 20 MB hochlädt und diese verzippt werden sollen, braucht er doch mind. 120 MB. d.h. Mit 60 MB werden die Bilder in den Arbeitsspeicher geladen und dann benötigt er nochmal die selbe Menge um das zu verzippen. Also 120 MB. Oder es laden 3 Leute zufällig gleichzeitig Bilder hoch, z.b. jeder 50 MB, und die GD-LIB macht von allen 3 gleichzeitig Thumbnails werden doch auch 150 MB Arbeitsspeicher gebraucht... Oder bin ich mit meinem Denken völlig auf dem falschen Dampfer?

Wir haben den Webspace gemietet und ich habe bzgl. des Arbeitsspeichers nachgefragt und folgende Antwort erhalten...

"Bei unseren Angeboten handelt es sich um sogenannte Shared-Hosting Angebote, d.h. es liegen mehrere Kunden-Accounts auf einem Server. Um bei Shared-Hosting Angeboten eine gute Performance der Server sicherstellen zu können, ist es notwendig, bei der Ausführung von Skripten gewisse Beschränkungen einzuführen. Nur auf diese Weise kann gewährleistet werden, dass einerseits Ihr Paket nicht durch andere Accounts beeinträchtigt wird und andererseits die Leistungsfähigkeit Ihres Pakets sichergestellt ist. Die eingestellten 32 MB sind schon großzügig bemessen. Branchenüblich sind 8 bis 16 MB!

Ich kann Ihnen als Lösung hier nur unsere VDS oder managed Server als Lösung anbieten. Dort können Sie über die Verwendung des Arbeitsspeichers innerhalb des zugewiesenen Kontingents frei verfügen. Details hierüber finden Sie auf unser Homepage: ....

Allerdings vermute ich hier eher ein schlecht programmiertes Script, da ein solcher Ressourcen Verbrauch unüblich ist."

Jetzt bin ich doch eher irritiert...
Stimmt das, das die meisten Webhosting-Angebote mit 8-16 MB Arbeitsspeicher arbeiten?

Ich wüsste auch nicht was man da anders Programmieren sollte.
Wenn man 250 MB Bilder hochladen kann, kommt man doch nicht drum herum viel Arbeitsspeicher zu haben, oder?

Komischerweise gab es in der Beziehung beim vorhergehenden Hoster keine Probleme. Da schien der Arbeitsspeicher ausreichend zu sein.
Obwohl das ein billiges Angebot war und der Server leider öfter nicht zu erreichen war, deshalb wurde auch gewechselt.

Würde mich freuen wenn mir jemand mal einen Rat geben könnte.
Der Kunde ist mittlerweile doch sehr verärgert, da es andauernd Probleme gibt.
Hoffe der viele Text hält nicht vom lesen ab...

Gruß Ron

  1. echo $begrüßung;

    Wenn nun jemand 3 Bilder a 20 MB hochlädt und diese verzippt werden sollen, braucht er doch mind. 120 MB.

    Das kann man so pauschal sicher nicht sagen, und ohne Kenntnis der Verarbeitungsschritte im Script und der beteiligten externen Programme schon gar nicht.

    Oder es laden 3 Leute zufällig gleichzeitig Bilder hoch, z.b. jeder 50 MB, und die GD-LIB macht von allen 3 gleichzeitig Thumbnails werden doch auch 150 MB Arbeitsspeicher gebraucht...

    Der Speicherverbrauch der GD-Funktionen richtet sich nach der Bildgröße, nicht nach der Dateigröße. In der Datei sind die Bilddaten komprimiert abgelegt. Für Bildberechnungen benötigt die GD jedoch jeden Pixel einzeln. Um beispielsweise ein Bild zu verkleinern braucht man die Informationen der Nachbarpixel. Diese jeweils erst bei Bedarf aus dem komprimierten Teil rauszulesen benötigt zu viele Ressourcen.

    Wenn man 250 MB Bilder hochladen kann, kommt man doch nicht drum herum viel Arbeitsspeicher zu haben, oder?

    Ja, 32 MB reicht da definitiv nicht.

    Würde mich freuen wenn mir jemand mal einen Rat geben könnte.

    Manchmal begrenzt der Hoster nur den PHP-Speicher und für das weniger häufig genutzte aber oft auch zu findende Perl und Python nicht ...

    echo "$verabschiedung $name";

    1. Hallo,

      danke für deine Antwort.

      echo $begrüßung;

      Wenn nun jemand 3 Bilder a 20 MB hochlädt und diese verzippt werden sollen, braucht er doch mind. 120 MB.

      Das kann man so pauschal sicher nicht sagen, und ohne Kenntnis der Verarbeitungsschritte im Script und der beteiligten externen Programme schon gar nicht.

      In Kürze:

      -----------------------------------
      1.
      Bilder-Upload: PHP/Perl -> http://uber-uploader.sourceforge.net/ sehr gutes Script.
      Das läuft auch einwandfrei. Da es auch auf Perl basiert, können die User bis zu 250 MB hochladen. Nur über PHP, gäbe es ja die Beschränkung auf 8 MB oder so.

      -----------------------------------
      2.
      Thumb-Nail-Generierung:
      Ist folgender PHP-Code:

      function makeThumb($Dir, $File)
      {
      $neueBreite=150;
      $neueHoehe= 95;

      $Bild = $Data->DocRoot .$Dir. $File;
      $Thumb= $Data->DocRoot .$Dir. "thumb/TN_" .$File. ".jpg";

      exec ("identify -format '%w' $Bild ",$W );
      exec ("identify -format '%h' $Bild ",$H );
      if ($W[0]!=0 && $H[0]!=0) {
      if($W[0]/$H[0] >1) $neueHoehe= intval($H[0]*$neueBreite/$W[0]);
      elseif($H[0]/$W[0] >1) $neueBreite= intval($W[0]*$neueHoehe/$H[0]);
      }

      if(system ("convert " .$Bild. " -resize " .$neueHoehe. "x" .$neueBreite. " " .$Thumb)) {
      $txtaction='Thumbnail nicht erstellt: '.$File;
      }
      else {
      $txtaction='Thumbnail erstellt: '.$File;
      }
      }

      -----------------------------------
      3.
      Verzippen des Auftrags:
      Da wird die Classe: CreatZip von @author Rochak Chauhan verwendet.

      http://www.phpclasses.org/browse/file/9524.html/
      Seite ist gerade nicht erreichbar

      Oder es laden 3 Leute zufällig gleichzeitig Bilder hoch, z.b. jeder 50 MB, und die GD-LIB macht von allen 3 gleichzeitig Thumbnails werden doch auch 150 MB Arbeitsspeicher gebraucht...

      Der Speicherverbrauch der GD-Funktionen richtet sich nach der Bildgröße, nicht nach der Dateigröße. In der Datei sind die Bilddaten komprimiert abgelegt. Für Bildberechnungen benötigt die GD jedoch jeden Pixel einzeln. Um beispielsweise ein Bild zu verkleinern braucht man die Informationen der Nachbarpixel. Diese jeweils erst bei Bedarf aus dem komprimierten Teil rauszulesen benötigt zu viele Ressourcen.

      Daraus lese ich, das man, je nach Bild, unter Umständen noch viel mehr Arbeitsspeicher benötigt als die doppelte Dateigröße.

      Wenn man 250 MB Bilder hochladen kann, kommt man doch nicht drum herum viel Arbeitsspeicher zu haben, oder?

      Ja, 32 MB reicht da definitiv nicht.

      Würde mich freuen wenn mir jemand mal einen Rat geben könnte.

      »»

      Manchmal begrenzt der Hoster nur den PHP-Speicher und für das weniger häufig genutzte aber oft auch zu findende Perl und Python nicht ...

      Ja, beim Upload habe ich genau diesen Umstand ausgenutzt.
      Aber Thumbnails mittels Perl zu erstellen oder das verzippen in Perl umzusetzen, ist das möglich?
      Mit Perl habe ich es nicht so...

      Vielleicht kannst du mithilfe des von mir angegebenen Codes noch mehr sagen?
      Oder jemad anderes?

      Gruß Ron

      echo "$verabschiedung $name";

      1. echo $begrüßung;

        Daraus lese ich, das man, je nach Bild, unter Umständen noch viel mehr Arbeitsspeicher benötigt als die doppelte Dateigröße.

        Um die Bilddaten einmal im Speicher zu haben benötigst du X × Y × 3 Byte bei Farbbildern. Hinzu kommt, dass GD noch teilweise 2- bis 3-fachen oder noch mehr Speicher zum Bearbeiten braucht.

        echo "$verabschiedung $name";

  2. Hi,

    wie dedlfix schon anmerkte ist eine Bilddatei mit 20MB im Speicher viel Groesser. Bereits eine Datei von 10MB sollte (je nach Format und Komprimierung) deine 32MB schon sprengen.

    Was ich mich frage: Warum ist ein solch komplexes und aufwaendiges System auf einem Shared Hosting Paket untergebracht? Da sollte doch wohl schon ein eigener Server her. (mit allen Vor- und Nachteilen)

    1. Hallo,

      auch dir, danke für deine Antwort.

      Hi,

      wie dedlfix schon anmerkte ist eine Bilddatei mit 20MB im Speicher viel Groesser. Bereits eine Datei von 10MB sollte (je nach Format und Komprimierung) deine 32MB schon sprengen.

      gut zu wissen...

      Was ich mich frage: Warum ist ein solch komplexes und aufwaendiges System auf einem Shared Hosting Paket untergebracht? Da sollte doch wohl schon ein eigener Server her. (mit allen Vor- und Nachteilen)

      Deshalb ja meine Frage hier im Forum,um zu schauen wie ich am besten vorgehe. Und das scheint mir auch das sinnvollste, eigenen Server. Ich ging davon aus das der Umzug keine weiteren Probleme geben wird, da alles ohne Fehler beim alten Provider (Padberg) lief. Der neue Provider sollte eigentlich zuverlässiger "besser" sein. War überrascht, daß dann plötzlich solche Probleme auftauchen. Mit eigenem Server meinst du, was mir der neue Provider angeboten hat?
      Ich zitiere:
      "Lösung hier nur unsere VDS oder managed Server als Lösung anbieten. Dort können Sie über die Verwendung des Arbeitsspeichers innerhalb des zugewiesenen Kontingents frei verfügen."

      Das meinst du, oder?

      Gruß Ron

      1. Hi!

        "Lösung hier nur unsere VDS oder managed Server als Lösung anbieten. Dort können Sie über die Verwendung des Arbeitsspeichers innerhalb des zugewiesenen Kontingents frei verfügen."

        Das meinst du, oder?

        jein. Ich kenne deren Angebot nicht. Du brauchst definitiv etwas mit mehr Power! :) Vielelicht reicht ein VServer schon. die sind meist etwas besser bestueckt und bieten vollen Serverzugriff, ohne dabei aber vom Shared Hosting Prinzip abzuweichen. Im Grunde nen PC mit mehreren virtuellen Maschinen drauf. Also auch nur bedingt zu empfehlen, da sie sich auch Performance mit anderen teilen.

        Ein vollwertiger Server, auf dem nur eurer Praesenz liegt mit genug Power ausgestattet um auch eure riesenbilder zu verwursten. Was hatte denn euer alter Provider an Ressourcen zur Verfuegung gestellt? Das wuerde ich zuerst in Erfahrung bringen und anhand der Information eine Entscheidung faellen.

        Ob der neue Platz dann wirklich besser ist muss man leider auch erst durch Praxis in Erfahrung bringen. Zahlen sind schoen und gut aber sind irgendwie doch nur theoretische Werte.

        Spntan wuerd ich einen Root Server vorschlagen. Das 'managed Server' klingt nach ner Option. VDS klingt nach virtuellem Server und ist wieder mit vorsicht zu geniessen. Allein der Satz "Dort können Sie über die Verwendung des Arbeitsspeichers innerhalb des zugewiesenen Kontingents frei verfügen." klingt merkwuerdig. Denn das kannst Du jetzt auch: halt bis 32 MB...

        Ihr braucht ein 'zugewiesenes Kontinget' in Umfang eines vollwertigen PCs. ODer Ihr schraenkt eure Bildgroessen ein. (Nicht Dateigroessen) Denn ein Bild mit 8000x6000 Pixeln ist im Speicher immer gleich gigantisch, egal wie gross die Datei ist. Dateigroesse hat was mit Qualitaet zu tun und nicht mit Quantitaet. (hm. ich glaub den merk ich mir fuer spaeter mal...)