[GREGEL DOT COM]

Optimierung der Ladezeiten. Das ewige Thema.
Heute habe ich allerdings mehr eine Frage, bzw. schreibe etwas über eine interessante Entdeckung. Interessant nur für denjenigen, der einen eigenen Server hat – oder weitreichende Möglichkeiten der Konfiguration.

KeepAlive on

Vorgeschichte:
Seit vielen Monaten beobachte ich die Ladezeiten des Blogs mittels Pingdom, die Grafiken sind überaus nett und aufschlussreich – viele von euch werden den Service kennen.

Es ging mir immer auf den Keks, dass die ersten Objekte zwar super schnell geladen werden, aber ab der zehnten Anfrage die Zeit zwischen Connect und First Byte a (relativ gesehen) in den Keller ging.
Insgesamt kam ich in den letzten Wochen auf eine Ladezeit von knappen 5 Sekunden – was sicherlich nicht schlecht ist. Für einen Dedicated Server allerdings auch keine Sensation.

Meine server-tuning.conf des Apache kenne ich schon auswendig, die Einstellungen passen.
Heute habe ich aus Langeweile einfach mal die Keepalive Directive auf off gesetzt.

Der Pingdom-Test hat mich sprachlos gemacht:
Gesamtladezeit 1,7 Sekunden, die Zeiten zwischen Connect und First Byte sind immer angenehm kurz.

KeepAlive off

Nun bin ich etwas ratlos!
Bisher habe ich KeepAlive für eine super Sache gehalten, der Performance mehr als förderlich.

Mein Blog gibt auf der Startseite ~ 50 Objekte aus, mit KeepAlive ist mit ein wenig Glück und einer schnellen Verbindung auf der Gegenseite nur eine TCP/IP-Verbindung möglich. So wird es eigentlich auch im Netz beschrieben…

Hat jemand von euch Erfahrungen bzgl. KeepAlive?

Werde es ein paar Tage auf off lassen und einmal beobachten… Seltsam ist das allemal.

Natürlich stellt sich auch die Frage, wie der Test von Pingdom auf den normalen Browser-Besucher anwendbar ist…

Aktuelle Suchbegriffe:
  • apache mysql wird mit der zeit langsamer /
  • apache braucht manchmal ewig /
  • apache2 bilder laden langsam /
  • first time byte apache /
  • "mit dem keepalive" /
Fan werden!
Nur ein Klick und Du kannst dem Blog auf Facebook und Google+ folgen!

12 Kommentare zum Artikel

  • ap

    ap

    Dein Blog ist sauschnell. :-) Aber was bringt eine Differenz von ca. 2 sec. für Vorteile? Ich achte selbst sehr auf die Performance, bin aber an einem Punkt (im Moment), an dem mich Design wieder mehr interessiert.

    http://tools.pingdom.com/fpt/default.asp?url=http%3a%2f%2fwww.querblog.de%2f&id=1788524

    • Marc

      Marc

      Ich denke der Durschnitsbesucher bemerkt keinen großen Unterschied. Die wesentlichen Hintergrund-Bilder sind immer ruck-zuck da…
      Über lange Ladezeiten konnte ich mich natürlich auch nie beschweren, aber eine Halbierung (wenn es tatsächlich eine ist) ist nie zu verachten :-)

  • Markus

    Markus

    Hmm klingt echt gut. Habs grad mal bei mir (IIS) getestet, kein Unterschied zu merken bzw. zu sehen. Werd da aber mal weiter testen, das interessiert mich jetzt auch^^

  • Sven

    Sven

    Hmmm ich habe den Test eben mal gemacht und habe dabei gesehen das meine Ladezeit von zwei, drei externen Grafiken ziemlich herunter gezogen wurden, aber diese beiden Grafiken lasse ich drauf und ich glaube das es auch nicht so wild ist und naja, auf solche Ladezeiten wie du komme ich natürlich nicht, aber ich bin mit meinen Zufrieden.

  • Marc

    Marc

    Hallo,

    ich habe das Phänomen bereits auf einer größeren Seite beobachtet. Allerdings glaube ich langsam, dass Pingdom die Zeiten nicht korrekt ermittelt, wenn KeepAlive ausgeschaltet ist.

    Bei mir sind die Zeiten auch viel besser geworden, allerdings nicht, wenn ich per YSlow die Gesamtzugriffszeiten prüfe. Auch habe ich nie wie Pingdom “Lags”, die ein weiteres Laden unterdrücken.

    Bei Pingdom stehen da manchmal bis zu 5 Sekunden für ein 1Kb Bildchen. Sowas habe ich noch nie bei eigenen Tests beobachtet.

    Aber wir testen mal wieder rum. Ich schreibe noch mal, wenn ich mehr weiß ^^

    Gruß

    • Marc

      Marc

      Hi Marc :-)
      Ich glaube auch eher, dass pingdom nicht so ganz richtig passt. Werde noch ein paar Tage Keepalive ausgeschaltet lassen und die Ladezeiten bei Google’s Webmastertools beobachten – dann abschließend entscheiden, ob an oder aus…

  • Marc

    Marc

    Also ich komm einfach zu keinem sinnvollen Fazit. Hier habe ich 300 Avatare aus meinem Forum als Benchmark-Grundlage ausgegeben:
    http://maxrev.de/html/avatar-benchmark.html

    Die Ladezeit bei KeepAlive Off liegt bei mir mit YSlow zwischen 12 und 13 Sekunden. Bei KeepAlive On liegt sie zwischen 8 und 9 Sekunden (Ein Freund hat eine bessere Leitung, aber die Beobachtung war die gleiche).

    Das ist allerdings logisch, da ja der Server die Verbindung aktiv hält und die restlichen Bilder über die gleiche Leitung gesendet werden können.

    Nun ist es aber bei KeepAlive Off so, dass jedes Bild eine separate Leitung bekommt.

    Klingt erstmal nach einem Argument gegen KeepAlive Off.

    Allerdings habe ich auch beobachtet, dass bei KeepAlive On die reservierten HTTP-Prozesse im Apache Monitor von max. 30 auf max. 300 ansteigen.

    Der Server könnte sich so meiner Ansicht nach zu einem Flaschenhals entwickeln, weil er mehr Leitungen auflässt, als er selbst eigentlich verkraftet und dadurch wird die Seite insgesamt auch langsamer.

    Nur, ohne Dir nahe treten zu wollen, glaube ich nicht, dass Dein Blog ähnlich viele Besucher hat wie mein Forum (ca. 20.000 Uniques am Tag).

    D.h. es ist eigentlich unlogisch, dass wir beide die gleiche Beobachtung mit dem Flaschenhals gemacht haben und tatsächlich Pingdom falsche Ergebnisse auswirft. Die Frage ist nur warum.

    Ich habe Pingdom gefragt und die meinen, bei uns läge ein Flaschenhals vor:

    ################################
    Please note that if the server is pretty loaded, you will actually often
    receive a faster response time from disabling keepalive due to that for
    example apache will have to keep a process open until a user has
    retrieved all content he was going to retrieve before the connection is
    closed when keepalive is enabled (thus, the process will be open until
    the user is finished).

    Since for example Apache has a maximum limit of how many processes
    Apache will spawn, the limit will pretty soon be hit, and Apache will
    therefore not be able to service a new user until previous a keepalive
    connection has been finished (and the connection can be closed and a new
    can be opened).
    ################################

    Bei den Google WMT sehe ich dagegen gar keinen Unterschied. Egal welche Option nun gewählt wurde.

    • Marc

      Marc

      Stimmt, an 20.000 komme ich noch nicht ganz ran ;-)
      Das mit dem “heay loaded” in der Mail passt auf jeden Fall nicht wirklich – mein Server langweilt sich permanent.
      Außerdem hatte ich den keepalive timeout auf 2 Sekunden stehen, das ist ja auch nicht wirklich lange.
      Ich werde jetzt am Wochenende nochmals was testen, danach werde ich KA vermutlich wieder aktivieren…

  • Marc

    Marc

    Also ich habe pingdom nochmal angeschrieben und parallel werde ich das Tool noch mal meine Avatarseite messen lassen:
    http://tools.pingdom.com/?url=http://www.maxrev.de/html/avatar-benchmark.html&treeview=0&column=objectID&order=1&type=0&save=true

    Seit dem 27.02. ist KeepAlive aus. Ich lasse das jetzt mal ein paar Tage an und mache zu verschiedenen Uhrzeiten Messungen. Danach mache ich KeepAlive wieder an.

    Wenn die Zeiten dann schlechter werden, liegt es eindeutig an Pingdom, denn wie zuvor berichtet, zeigt der Live-Test genau das Gegenteil.

    Mal sehen was Pingdom dazu noch sagt.

  • Michael

    Michael

    KeepAlive maxrequest sagt wieviel Connections maximal ein User benutzen kann. Wenn der Wert zu gering ist, dann wird die Seite langsam. Bei stark frequentierten Servern ist es aber teilweise nötig das zu regulieren, da er sonst in die Knie gehen kann.

    Mit keepalive timeout kann die Verbindungszeit festgelegt werden …

    http://httpd.apache.org/docs/1.3/keepalive.html

  • Franky

    Franky

    ja diese ewig lange Geschichte mit der Ladezeit vs. keepalive vs Serverkapazität.

    Hatte früher auf dem alten Server auch das keepalive auf off.

    bei Keepalive off:
    Die Beobachtung war , dass jedes Bild einzeln geladen werden musste (blöd bei einer Thumbnailvorschau einer Galerie)

    Als ich dann Keepalive auf on gesetzt habe, war ich erst tieriesch begeistert. Es fühlte sich an, als würden die ganzen Thumbnails wie ein einziges Bild vom Server geladen.

    Beobachtung nachdem auf on gesetzt wurde:
    Ab einer bestimmten Anzahl von Usern waren offene Slots (von MaxClients) nicht mehr vorhanden und neue User waren nur am Laden und sahen keine Seite mehr (User die schon auf der Seite waren, bekamen davon nichts mit und erfreuten sich einer geringen Latenz und Zugriffszeiten).
    Gleichzeitig ging die LA zurück, was auch ein Hinweis darauf ist, dass neue User (zu Spitzenzeiten) nicht mehr auf den Server gelangen bzw. die Slots einfach dicht waren.

    Das Problem mit dem Keepalive (dass es den Server zuspammt) kann eigentlich auch auf kleinen Maschinen umgangen werden, indem man den Keepalivetimeout auf 2 Sekunden begrenzt (jedes Objekt, dass geladen wird, setzt den Counter ja wieder zurück und dies reicht für einen Aufruf mit mehreren Objekten aus).

    momentan teste ich auf einem Server mit 32GB RAM eine MaxClients Wert von 4000.
    Wer sich schon immer gewundert hat, warum man diesen Wert nicht höher als 256 setzen kann:

    Einfach vor den mpm prefork (außerhalb des if module)
    einen neue Variable hinschreiben:
    z.b.
    ServerLimit 1000

    und schon kann man Maxclients so hoch setzen, wie auch ServerLimit ist.

    Dazu muss man wieder rechnen:
    jeder Apache Prozess braucht wieder 15M Ram
    und das dann mal MaxClients rechnen und dann unter dem maximal verfügbarem RAM bleiben….

    schön ist auch die Statistik Server-Status
    (wer sich schon immer fragte, wo man sich das bitte anzeigen lassen kann:)
    /etc/apache2/mods-enabled/status/

    da gibs ne configdatei, wo man auch
    allow from ipadress
    eintragen kann und dann unter der Domain und domain/server-status
    eine Auflistung bekommt, wieviel Slots momentan frei sind.

    MaxSpareServers und Minspareserver heißt eigentlich so viel, wieviel Server sollen maximal und mindestens frei sein, falls auf einmal ein großer Ansturm auf den Server kommt, dass diese Prozesse schon laufen und nicht erst preforked werden müssen. (Stellt einen Puffer dar)

    Wenn man das alles in Beachtung nimmt, kann man eigentlich gut weg kommen mit Keepalive.

    leider findet man im Internet meist relativ wenig zu den Zusammenhängen und muss erst Jahrelang Erfahrung damit machen.

    Hoffe es hilft jemandem irgendwie weiter.
    Und dennoch gilt: probieren und überwachen

  • Holger

    Holger

    Nette Infos, die man hier findet, Danke dafür!
    Ich bin gerade auf der Suche nach den besten Einstellungen, da mein WP-Blog auf einem XEN-Server läuft, der leider unregelmässig in die Knie geht. Nun werde ich mal KA zunächst anlassen und den Timeout auf 2 setzen. Warten wir ab, was passiert… oder sollte ich doch gleich KA off machen? Hm…

Los geht's, jetzt Dein Kommentar...

Hinweis: SEO-Kommentare landen im Spamordner. Bitte beachte die Datenschutzerklärung vor dem Absenden deines Kommentars - denn durch das Senden akzeptierst du sie. Keine Sorge, dort steht nur das, was der Gesetzgeber im 21. Jahrhundert verlangt. Ich bin einer der Guten.