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.
- 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.
- 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.
- 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.