Ich habe einen Webserver auf einem Linode 1024 VPS basierend
- Ubuntu 11.10
- Nginx 1.0.5
- PHP 5.3.6 (mit PHP-FPM, APC)
- Lack 3.0.2
Und ein paar Blogs, die auf WordPress 3.3.1 basieren. Eines davon ist ein einfaches Blog mit der Standardkonfiguration, dem Standardthema und nur dem Post "Hello World", um den Server zu testen. Das andere ist ein von einem anderen Server geklontes Blog mit fast 10.000 Beiträgen und über 10.000 Kommentaren. Dieser Blog hat ungefähr 5.000 Unikate pro Tag.
Der Server gibt gute Zahlen für einen ab-Test für das Test-Blog an , aber der gleiche Test mit dem geklonten Blog ist unmöglich durchzuführen: Der ab-Test lädt den Server zu stark, und ich muss den Prozess anhalten, was trotzdem dazu führt, dass ab angezeigt wird Dieses wirklich schlechte Ergebnis .
Das htop zeigt im Normalbetrieb ebenfalls eine "normale" Belastung , während des ab-Tests jedoch eine normale hohe Belastung .
Es passiert noch etwas Merkwürdiges (das Wichtigste für mich): Die Zeit bis zum ersten Byte ist extrem hoch , aber danach wird die Seite sehr schnell geladen. Dies kann leicht mit Diensten wie tools.pingdom.com getestet werden, die dieses Ergebnis liefern . Bitte achten Sie auf den gelben Bereich, der "Wartezeit" bedeutet.
Warum passiert dies? Mögliche Ideen:
- Ungültige PHP-FPM-Konfiguration
- Die Antwortzeit von Linode DNS ist furchtbar. Unsinn - das Testblog löst DNS in Ordnung, TTFB ist fantastisch
- Ungültige Nginx-Konfiguration
Falls jemand mehr Informationen benötigt,
- Hier haben Sie die aktuelle geklonte Blog- Nginx- Konfigurationsdatei ( /etc/nginx/sites-available/muycomputerpro.com ).
- Hier ist die aktuelle my.cnf-Konfiguration ( /etc/mysql/my.cnf )
- Hier haben Sie die aktuelle PHP-FPM-Konfiguration ( /etc/php5/fpm/pool.d/www.conf )
if -f
Direktive zu tun haben, die Sie in demlocation
Container in der Nginx-Konfiguration verwenden. Basierend auf dem, was ich hier lese wiki.nginx.org/Pitfalls , habe ich das Gefühl, dass-f
eine ineffiziente Suche nach der Datei durchgeführt wird, die ein Time To First Byte-Problem verursachen kann, insbesondere wenn Sie Verzeichnisse mit einer großen Anzahl von haben Dateien.ab -n 1000 -c 100 -H 'Host: mysite.com' http://127.0.0.1/
Das heißt - der Unterschied zwischen zwischengespeicherten (Lack) und nicht zwischengespeicherten Ergebnissen reicht aus, um die Position zu bestätigen, dass das Problem nicht mit dem Netzwerk, DNS usw. zusammenhängt und wie erwartet in der Verarbeitung liegt.Antworten:
Erstens ist dies keine Antwort, sondern vielmehr ein diagnostischer Ansatz.
Dies ist keineswegs umfassend - oder auch nur etwas Nahes, es ist nur ein Ausgangspunkt.
Zeit bis zum ersten Byte
Das Time-to-First-Byte (TTFB) besteht aus einer Reihe von Komponenten:
Wenn Sie sich eine ApacheBench-Ausgabe ansehen, sehen Sie auch:
Vergleiche zu Eliminate-Komponenten
Mit wenigen Ausnahmen liegt Ihr Problem in der Backend-Verarbeitung, die normalerweise auf zu komplexen / ineffizienten Code oder schlecht konfiguriertes MySQL zurückzuführen ist.
Eine gute Möglichkeit, dieses Problem zu lösen, besteht in einer Reihe von Vergleichen, durch die verschiedene Aspekte Ihres Setups beseitigt werden. Ein guter Vergleich sollte so konstant wie möglich sein, um das Problem einzugrenzen. Derzeit haben Sie die folgenden Vergleiche bereitgestellt:
Im Idealfall müssen Sie Ihre gesamte Website duplizieren und dann den gesamten Inhalt mit Ausnahme eines Artikels und der zugehörigen Kommentare löschen. Der Sinn dieses Tests wäre, abschließend festzustellen, ob die große Menge an Inhalten das Problem ist oder ob andere Aspekte Ihres Setups (WordPress-Plugins, Theme usw.) die Ursache sind. Sie würden im Wesentlichen die Leistung identischer Websites auf demselben (neuen) Server vergleichen - also dieselbe Seite (dieselbe Länge usw.) laden - mit dem einzigen Unterschied, dass der gesamte Websiteinhalt (z. B. besteht eine gute Chance, dass einige Plugins dies nicht tun) gut skalieren mit erhöhtem Inhalt).
Ohne etwas zu ändern, gibt es einige andere Vergleiche, die Sie durchführen können:
Optimieren Sie Ihr Backend
Zu diesem Zeitpunkt sollten Sie entweder das Problem gefunden oder die Schlussfolgerung gezogen haben, dass es in Ihrem Backend liegt. Das lässt Sie Nginx, PHP oder MySQL.
(Ich soll hier erwähnen, dass es immer praktisch ist , zu wissen , ob Ihre Engpass CPU, RAM oder I / O - zwischen
sar
,top
,iostat
,vmstat
,free
., Etc. sollten Sie in der Lage sein , bis zu einem gewissen Abschluss dazu kommen)Nginx
Nginx nimmt nur Anforderungen entgegen und stellt entweder statischen Inhalt bereit oder verschiebt die Anforderungen nach PHP-FPM. In der Regel gibt es mit Nginx nicht viel zu optimieren.
Idealerweise haben Ihr Testblog und Ihr geklontes Blog identische Konfigurationen. In diesem Fall haben Sie Nginx effektiv als Problem beseitigt.
Anwendung
Wenn Sie versuchen, ein Problem in Ihrem Code zu identifizieren (z. B. ein langsames Plugin usw.), sind die langsamen Protokolle der Ausgangspunkt.
MySQL
PHP
PHP-FPM
Es ist erwähnenswert, dass Ihre htop-Ergebnisse zeigen, dass PHP-Fpm den Großteil der CPU beansprucht - und Ihr Problem scheint direkt damit in Zusammenhang zu stehen.
Caching
Sobald Sie jeden wahrscheinlichen Engpass optimiert haben, können Sie mit dem Caching beginnen.
Angesichts der Einschränkungen Ihrer Anwendung und Hardware können Sie die Back-End-Leistung unter Umständen nicht so stark verbessern, um die Verwendung des Back-End zu minimieren.
Weitere Lektüre
quelle
memory_limit
wurde in einem anderen Beitrag darauf hingewiesen, dass es bei der Leistung nicht hilft.