Ressourcenproblem : Downloads per echo von fread() ausliefern

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

  • Ressourcenproblem : Downloads per echo von fread() ausliefern

    Moin,


    Vom Prinzip her sollen die Downloads über folgenden Code ausgeliefert werden :

    PHP-Code:
    // ignore user abort
                    
    ignore_user_abort(true);
                    
                    while(!
    feof($fp) and (connection_status() == 0)) {
                            
    set_time_limit(0);
                            echo 
    fread($fp$buffer);
                            
    flush(); // ob_flush();
                            
    usleep($sleep_time);
                    }

                    
    fclose($fp); 
    Nun habe ich mal einige hundert User simuliert und hatte dann das Problem, dass die Ladezeit der Webseite auf >10 Sekunden bis Timeout stieg. Der ganze apache war lahmgelegt, auch das öffnen einer simplen bilddatei im webroot dauerte >10 sek bis timeout. Load average und CPU-Belastung waren nicht besonders hoch.

    Jemand sagte mir, dass ggf. durch schlechten php-code die scripts auf den childs blockieren würden. ( Ich habe mal geschau es liefen >250 childs, wahrscheinlich 256 = Maximale Anzahl ).

    Worin liegt die lange Ladezeit bergründet ? Was würdet Ihr empfehlen ?


    Gruß
    Pingu12
    Zuletzt geändert von pingu12; 07.06.2005, 21:15.

  • #2
    nimm mal das
    PHP-Code:
    set_time_limit(0); 
    aus der while Schleife raus. Einmal davor reicht völlig.

    Was willst Du mit
    PHP-Code:
    usleep($sleep_time); 
    ??
    Und wie hoch ist $sleep_time;?
    Verzögert die Sache doch nur unnötig.
    Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

    Kommentar


    • #3
      Das

      PHP-Code:
      usleep($sleep_time); 
      dient dazu die Downloadgeschwindigkeit zu begrenzen.

      Zu :
      PHP-Code:
      set_time_limit(0); 
      Ich dachte, der Aufrufe von set_time_limit(0) würde nur die Maximale Laufzeit des PHP Scriptes um 30 Sekunden verländern, müsste daher also alle 30 sek aufgerufen werden.... irgendwo mal aufgeschnappt - Unsinn ?

      Kommentar


      • #4
        schau doch selber: http://de3.php.net/set_time_limit
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          wenn du set_time_limit(); sowieso auf "0" setzt ists doch eh egal. die "stopuhr" läuft zwar ab dem zeitpunk schon von neuem, aber da du gsagt hast , dass es kein timelimit gibt, kann der henker auf seine uhr gucken bis er schwarz wird. reicht folglich den befehl nur 1x aufzurufen.
          iwas du mit usleep bezwecken willst, ist mir auch nicht ganz schlüssig. willst du den server entlasten? die geschwindigkeit für alle gleich halten? naja kannst du aber alles wohl getrost beiseite schieben, wenn dem so ist

          [edit:]
          dass ich immer so langsam schreiben muss... *g*

          Kommentar


          • #6
            Original geschrieben von pingu12
            dient dazu die Downloadgeschwindigkeit zu begrenzen.
            Worin liegt die lange Ladezeit bergründet ?
            Wie passt das zusammen?
            Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

            Kommentar


            • #7
              Original geschrieben von thommyk
              Wie passt das zusammen?
              Ich hatte mich wohl ungünstig ausgedrückt, änder das gleich.

              Das LoadScript (oben aufgeführtes) sorgt dafür, dass der ganze apache lahm gelegt ist. Auch ein einfacher link auf ein bild oder dergleichen benötigt >10 sek bis timeout um zu laden.

              Zu der Timelimit-Geschichte :

              Das kann wohl raus, würd aber nicht ausschlaggebend für das Problem sein.

              Was legt den apache lahm ? Gefragt sind an dieser Stelle besonders jene, die sich mit php UND dem apachen ein wenig auskennen, denn ich vermute, dass der Hund bei zuvielen childs begraben liegt - dazu interessieren mich eure Meinungen besonders.
              Zuletzt geändert von pingu12; 07.06.2005, 21:13.

              Kommentar

              Lädt...
              X