Auswertung eines Benchmarks

Du hast durch Tests rausgefunden dass 100 gleichzeitige Anfragen deinen Server ins digitale Nirvana schicken, hast aber MaxClients auf 150 stehen?
Timeout und KeepAliveTimeout stehen uebrigens viel zu hoch.
tuning-primer sollte bei MySQL informieren.

Der Server hat also laut Angaben mind. 2GB, max. 4. 1CPU Kern.
Also maximal 2GB. Da du nie weisst ob du mehr anfragen kannst waere es sinnlos den Server fuer mehr zu konfigurieren.
 
Deine Frage ist berechtigt. Genau mit diesen Werten habe ich rumgespielt bis zum Abwinken. Jetzt stehen sie wieder auf dem Originalzustand, wie sie direkt nach Installation unter Ubuntu stehen. Egal wie ich dran gedreht habe, die Ergebnisse waren immer zwischen 3 und 4 Zugriffe pro Sekunde. Aber nur, wenn ich TYPO3-Seiten abgerufen habe. Bei allen anderen Webseiten gute Ergebnisse. Ich gehe davon aus, dass die schlechte Performance durch TYPO3 zustande kommt, da ich nicht einmal einen Unterschied gemerkt habe, wenn ich ZendOptimizer an-/ausgeschaltet habe. Ich denke, TYPO3 braucht einfach einen stärkeren Server, wenn die Seiten eine bestimmte ANzahl an Zugriffen erreichen...
 
Hast du andere dynamische Seiten gebenchmarkt oder statische?

Statische Seiten bringen einen Webserver nicht an seine Grenzen, egal wie falsch er konfiguriert ist.

Ich denke das dein MySQL-Server auch eine große Rolle spielt, aber dazu wurde ja schon etwas gesagt.
 
Eine der anderen getesteten Seiten war eine Bildergalerie, die unter gallery2 läuft. Also auch eine MySQL laufen hat. Hier ist allerdings die Anzahl der Failed Requests sehr hoch. Um genauer zu sein, teilweise fast bei 70%. Dafür habe ich zwischen 200 und 300 Requests pro Sekunde.

Die andere Seite war statisch und somit nicht repräsentativ.
 
Wie stellst du dir das Tunen vor? Es gibt keine magischen run_fast=YES Parameter, die bei allen anderen Usern gesetzt wurden...

Dein Top-Auszug zeigt eine zu 100% ausgelastete CPU und laut Beschreibung hast du auch nur einen Core, der der Rechenarbeit übernehmen kann. Außerdem zeigt Top ein Load Average von über 60, was (ganz grob) heißt, dass da 60 Prozesse gleichzeitig auf die CPU wollen. Es entsteht also eine Warteschlange vor der CPU.

Der erste Prozess rechnet also vor sich hin und bekommt (unter Linux) nach etwa 200ms die CPU wieder abgenommen, damit die anderen auch mal dran kommen. Falls dieser Prozess noch nicht fertig war, muss er sich nun wieder ganz an das Ende der Warteschlange anstellen. Nehmen wir an, dass die anderen 59 Prozesse auch ihre 200ms auskosten, dann kommt da schon eine Wartezeit von 12 Sekunden zusammen, bevor der erste Prozess überhaupt die Chance zum Weitermachen bekommt. Und das geht eben allen Prozessen so.

In der Realität werden die Prozesse ihre 200ms vermutlich nicht immer ausnutzen, weil jeder (blockierende) I/O und jeder Kontextwechsel (weil z.B. eine SQL-Abfrage an MySQL gesendet wurde) zum sofortigen Freigeben der CPU führen. Aber auch da muss MySQL erstmal an die CPU kommen. In Summe kommt deine schlechte Antwortzeit aber einfach daher, dass jeder Request zwischendurch immer wieder warten muss, bis er weiter verarbeitet werden kann. Und die Wartezeit ist deutlich länger, als die Verarbeitungszeit. Stell dir einen Supermarkt mit nur einer offenen Kasse vor, wo du nacheineinder 100 einzelne Teile nimmst, bezahst und ins Auto bringst, während 50 andere Leute das auch tun. Du stehst quasi nur an der Kasse an...

Wartezeit kann man nicht Tunen. Du kannst nur den Verursache weniger belasten oder die Ressource vergrößern, d.h.
  1. Den gesamten PHP-Code (weil der braucht die CPU) optimieren und jedes unnötige Plugin entfernen und jede Zeile PHP-Code rauswerfen, die nicht unbedingt nötig ist. Da du fertige Software verwendest, ist das wohl keine Alternative, denke ich.
  2. Die Anzahl der gleichzeitig ankommenden Requests reduzieren, d.h. den Benchmark mit einer kleineren Concurrency laufen lassen. Wie bereits erkannt, ist dein Server für 100 gleichzeitige Requests nicht ausgestattet.
  3. Auf einen anderen Server umsteigen, der mehr und schnellere CPUs hat.

Es macht keinen Sinn, einen Server mit mehr zu belasten, als er sinnvoll verträgt (s.u.). Reduzier die Parallelität, bis du 95% der Requests in weniger als einer Sekunde hast (oder was du für zumutbare Antwortzeiten hälst) und dann kannst du von da aus die Konfiguration ändern und vergleichen.
 

Attachments

  • OL-Donkey-Cart.jpg
    OL-Donkey-Cart.jpg
    16.5 KB · Views: 76
OK, das war jetzt mal eine sehr ausführliche Antwort und eine sehr gute Erklärung. Ich denke, ich werde auf Dauer auf einen Managed Server mit ordentlich Performance ausweichen und endlich damit aufhören, wie ein Verrückter am Apache rumzuoptimieren. Zum Glück hab ich dabei was gelernt. Lang genug saß ich ja dran :-)
 
Back
Top