Ergebnis 1 bis 7 von 7

Thema: Apache Performance .....

  1. #1

    Apache Performance .....

    Nabend zusammen,

    ich bastle gerade an einem kleinen Projekt und bin auf etwas gestossen, dass ich nicht ganz verstehe

    Spoiler: 


    https://github.com/schnoog/multi_newscrawler - läuft auf newscrawler.eu
    Hintergrund: Britischer Kollege möchte die UK Klatschpresse "analysieren". Dazu werden die Headlines von bisher Express und Daily Fail in einer MySQL DB gespeichert.

    Struktur:
    Die Daten liegen in einer einzelnen Memory-table (1.6m Einträge).
    Betrieben wird das ganze auf php Basis mit Apache.

    Sobald ich grössere Datenmengen abfrage, sehe ich komische Effekte. Die Datebank-Abfrage läuft soweit "rund" (wildcard auf varchars, daher auch mal ein paar Sekunden).
    Die Daten werden mit Smarty geparst und in einer riegigen Tabelle ausgegeben.

    Beispiel:
    Zeit vom start des php Skriptes bis Smarty alles geparst und ausgegeben hat: 1.2 Sekunden
    Content Download Grösse: 2.9MB
    Content Download Zeit: 1.3 Minuten
    Lade ich eine Datei direkt vom Webserver, liefert Apache mir diese in "Fullspeed" (also was meine Land-DSL Leitung hergibt aus)

    Mal ein Chrome-Debug-Screenshot:
    Klicke auf die Grafik für eine größere Ansicht 

Name:	newscrawler_debug.jpg 
Hits:	32 
Größe:	70,9 KB 
ID:	57304

    Hat jemand von Euch zufällig eine Ahnung woran des liegen könnte?
    Gruß
    braegler

  2. #2
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    6.814
    ngb:news Artikel
    17

    Re: Apache Performance .....

    Wie sieht denn der php Code dazu aus?
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  3. #3
    Mitglied

    (Threadstarter)


    Registriert seit
    Jul 2013
    Beiträge
    802

    Re: Apache Performance .....

    Hier mal die index.php

    Code (PHP):
    1.  
    2. <?php
    3. include_once("./loader.php");
    4. $data = false;
    5. $time_end = 0;
    6. $cfg['searchtype'] = "list";    
    7. if(isset($_POST['search_type'])){
    8.     $cfg['searchtype'] = "list";
    9.     if($_POST['search_type'] == "Get the Graph"){        
    10.         $cfg['searchtype'] = "graph";
    11.         $time_start = microtime(true);
    12.         $data = ProcessRequest();
    13.         $data = GetGraphData($data);
    14.         $time_end = microtime(true);
    15.     }else{
    16.         $time_start = microtime(true);
    17.         $data = ProcessRequest();
    18.         $time_end = microtime(true);
    19.     }
    20. $cfg['dbquerytime'] = $time_end - $time_start;
    21. }
    22.  
    23. if(!isset($_POST['year_from'])) $cfg['post']['year_from'] = date("Y") -1;
    24.  
    25.  
    26.  
    27. $smarty->assign('data',$data);
    28. $smarty->assign('cfg', $cfg);
    29. $smarty->display('index.tpl');
    30.  
    31. if($time_end >0){
    32.  $te = microtime(true);
    33.  $td = $te - $time_end;
    34.     error_log($td);
    35. }
    36.  
    37.  
    Das interessante ist, dass der php-Code durchrennt. Nach 1.2 Sekunden wurde im meinem Testlauf die Zeile 34 ausgeführt.
    Danach dauerte es noch über 1 Minute bis die 2.9MB Content komplett übertragen wurden

    Der gesamte Code liegt auf
    https://github.com/schnoog/multi_newscrawler


    Info zum Indianer:
    Server version: Apache/2.4.25 (Debian)
    Server built: 2018-11-03T18:46:19
    Server's Module Magic Number: 20120211:68
    Server loaded: APR 1.5.2, APR-UTIL 1.5.4
    Compiled using: APR 1.5.2, APR-UTIL 1.5.4
    Architecture: 64-bit
    Server MPM: prefork
    threaded: no
    forked: yes (variable process count)
    Server compiled with....
    -D APR_HAS_SENDFILE
    -D APR_HAS_MMAP
    -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
    -D APR_USE_SYSVSEM_SERIALIZE
    -D APR_USE_PTHREAD_SERIALIZE
    -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
    -D APR_HAS_OTHER_CHILD
    -D AP_HAVE_RELIABLE_PIPED_LOGS
    -D DYNAMIC_MODULE_LIMIT=256
    -D HTTPD_ROOT="/etc/apache2"
    -D SUEXEC_BIN="/usr/lib/apache2/suexec"
    -D DEFAULT_PIDLOG="/var/run/apache2.pid"
    -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
    -D DEFAULT_ERRORLOG="logs/error_log"
    -D AP_TYPES_CONFIG_FILE="mime.types"
    -D SERVER_CONFIG_FILE="apache2.conf"
    Das Ding liegt auf https://newscrawler.eu

    Zum Nachstellen:
    Links auf das Listen-Icon gehen um die 3 vordefinierten Suchkombis auswählen zu können.
    Dort z.B. EU & Brexit related wählen, und die Aanzahl der Suchergebnisse auf "unlimited" einstellen -> Get the list.
    Gruß
    braegler

  4. #4
    since 1998

    Moderator

    Avatar von theSplit
    Registriert seit
    Aug 2014
    Beiträge
    25.504
    ngb:news Artikel
    4

    Re: Apache Performance .....

    Ich glaube dein Javascript rechnet zu viel:

    Mal drei Screenshots die das etwas verdeutlichen (Firefox Laufzeitanalyse):
    Was auffällt, ständige Layout Änderungen/Stil-Neuberechnungen.

    Flow 1:


    Flow 2:


    Flow 3:



    Folgende Ideen dazu:
    1) Die filltable.js ersetzen so fern nicht benötigt mit dem teuren $oldTbody.replaceWith in der each in filltable.js ab Zeile 118.
    2) Eventuell hilft es auch die Tabelle zu verstecken so lange diese nicht komplett dargestellt ist, das könnte auch die Repaints verringern da der Browser nicht bei jeder neuen Zeile layoutet.
    Für diesen Beitrag bedanken sich saddy, drfuture

  5. #5
    Mitglied

    (Threadstarter)


    Registriert seit
    Jul 2013
    Beiträge
    802

    Re: Apache Performance .....

    Danke für Deine Hinweise.
    Hab filtable.js mal testweise deaktiviert, änder leider nichts an der Download-Ladezeit.

    Die Tabelle zu verstecken bis alle Daten angekommen sind, hat merklich was gebracht. Die DL Zeit ist jetzt bei 8 Sekunden. Danach rendert er dann in weiteren 5-8 Sekunden.
    Für diesen Beitrag bedanken sich Roin, saddy, drfuture
    Gruß
    braegler

  6. #6
    Freier Denker
    Registriert seit
    Jul 2013
    Beiträge
    512

    Re: Apache Performance .....

    Off:
    Seit wann sammelst du denn da schon Daten? Oder hast du einfach nachträglich die beiden Seiten massenweise gecrawled? Gibt es da nicht Probleme, wenn du ganze Seiten crawlest? Gerade Nachrichtenportale haben da doch meistens diverse Sicherheitsmechanismen, um das zu verhindern oder täusche ich mich da?

  7. #7
    Mitglied

    (Threadstarter)


    Registriert seit
    Jul 2013
    Beiträge
    802

    Re: Apache Performance .....

    Tachjen,
    hab die Seiten in erst vor wenigen Wochen abgegrast. Beide bisherigen "Opfer" haben recht übersichtliche Archive.
    Der erste Versuch war etwas harzig, da bin ich wohl in ein Rate-Limiter reingerannt.
    Hab dann einfach einen kleinen Delay eingebaut.
    Mit 0.5 Sekunden zwischen den einzelnen Anfragen ging es dann jedoch.
    Für diesen Beitrag bedankt sich Roin
    Gruß
    braegler

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •