Mam serwer sieciowy oparty na Linode 1024 VPS
- Ubuntu 11.10
- Nginx 1.0.5
- PHP 5.3.6 (z PHP-FPM, APC)
- Lakier 3.0.2
I kilka blogów tam opartych na WordPress 3.3.1. Jednym z nich jest zwykły blog z domyślną konfiguracją, motywem i postem „Hello World”, aby przetestować serwer. Drugi to blog sklonowany z innego serwera z prawie 10 000 postów i ponad 10 000 komentarzy. Ten blog ma około 5 tysięcy unikatów dziennie.
Serwer podaje dobre liczby w teście ab dla testowego bloga , ale ten sam test ze sklonowanym blogiem jest niemożliwy do zrobienia: test ab zbytnio ładuje serwer, a ja muszę przerwać proces, który i tak powoduje ab ten naprawdę słaby wynik .
Htop pokazuje również „normalne” obciążenie podczas normalnej pracy , ale nienormalnie duże obciążenie podczas testu ab.
Dzieje się jeszcze jedna dziwna rzecz (najważniejsza dla mnie): czas do pierwszego bajtu jest bardzo wysoki , ale po tym czasie strona ładuje się naprawdę szybko. Można to łatwo przetestować za pomocą usług takich jak tools.pingdom.com, co daje ten wynik . Proszę zwrócić uwagę na ten żółty region, który oznacza „Czas oczekiwania”.
Dlaczego to się dzieje? Możliwe pomysły:
- Zła konfiguracja PHP-FPM
- Czas odpowiedzi DNS na Linode jest okropny. Bzdury - blog testowy rozwiązuje problem DNS, TTFB jest fantastyczny
- Zła konfiguracja Nginx
Jeśli ktoś potrzebuje więcej informacji,
- Tutaj masz bieżący sklonowany plik konfiguracyjny bloga nginx ( /etc/nginx/sites-available/muycomputerpro.com )
- Tutaj masz aktualną konfigurację my.cnf ( /etc/mysql/my.cnf ) (Wiem, na razie brak buforowania, nie miało to wpływu na TTFB w przeszłości)
- Tutaj masz aktualną konfigurację PHP-FPM ( /etc/php5/fpm/pool.d/www.conf )
if -f
dyrektywą, której używasz wlocation
kontenerze w konfiguracji nginx. Na podstawie tego, co czytam tutaj wiki.nginx.org/Pitfalls , mam wrażenie, że-f
robi nieefektywne wyszukiwanie pliku, co może powodować problem z czasem do pierwszego bajtu, szczególnie jeśli masz katalogi z dużą liczbą akta.ab -n 1000 -c 100 -H 'Host: mysite.com' http://127.0.0.1/
To powiedziawszy - różnica między wynikami w pamięci podręcznej (Varnish) a wynikami niebuforowanymi wystarcza do zweryfikowania pozycji, że problem nie jest związany z siecią, dns itp. I polega na przetwarzaniu, zgodnie z oczekiwaniami.Odpowiedzi:
Po pierwsze, nie jest to odpowiedź, lecz podejście diagnostyczne.
Nie jest to bynajmniej wyczerpujące - ani nawet cokolwiek bliskiego, to tylko punkt wyjścia.
Czas na pierwszy bajt
Czas do pierwszego bajtu (TTFB) składa się z wielu elementów:
Gdy spojrzysz na wynik ApacheBench, zobaczysz również:
Porównania w celu wyeliminowania komponentów
Z nielicznymi wyjątkami, twój problem będzie polegał na przetwarzaniu backendu, co zwykle sprowadza się do zbyt skomplikowanego / nieefektywnego kodu lub źle skonfigurowanego MySQL.
Dobrym sposobem na rozwiązanie tego problemu jest seria porównań, które wyeliminują różne aspekty konfiguracji. Dobre porównanie powinno utrzymywać możliwie stałą wartość, aby pomóc zawęzić problem. Obecnie podałeś następujące porównania:
Idealny test polegałby na skopiowaniu całej witryny, a następnie usunięciu całej zawartości oprócz jednego artykułu i powiązanych komentarzy. Celem tego testu byłoby ostateczne ustalenie, czy problem stanowi duża ilość treści, czy przyczyną są inne aspekty konfiguracji (wtyczki WordPress, motyw itp.). Zasadniczo porównałbyś wydajność identycznych witryn na tym samym (nowym) serwerze - ładowanie tej samej strony (ta sama długość itp.) - jedyną różnicą jest całkowita zawartość witryny (np. Istnieje duża szansa, że niektóre wtyczki nie dobrze skalować ze zwiększoną zawartością).
Nie zmieniając niczego, możesz wykonać kilka innych porównań:
Strojenie backendu
W tym momencie powinieneś znaleźć problem lub stwierdzić, że leży on w twoim backendie. To pozostawia Nginx, PHP lub MySQL.
(Należy tu wspomnieć, że jest ona zawsze pod ręką, aby wiedzieć, czy wąskim gardłem jest procesor, RAM, lub I / O - między
sar
,top
,iostat
,vmstat
,free
., Etc powinieneś być w stanie dojść do jakiegoś wniosku w tej sprawie)Nginx
Nginx po prostu przyjmuje żądania i albo podaje statyczną zawartość, albo przesuwa żądania do PHP-FPM - zwykle nie ma wiele do optymalizacji z Nginx.
Idealnie, twój blog testowy i sklonowany blog mają identyczne konfiguracje, w którym to przypadku skutecznie wyeliminowałeś Nginx jako problem.
Podanie
W przypadku, gdy próbujesz zidentyfikować problem w kodzie (na przykład powolną wtyczkę itp.), Powinieneś zacząć od powolnych logów.
MySQL
PHP
PHP-FPM
Warto zauważyć, że wyniki htop pokazują php-fpm jako pochłaniające większość procesora - a twój problem wydaje się być bezpośrednio z tym związany.
Buforowanie
Po zoptymalizowaniu każdego prawdopodobnego wąskiego gardła rozpocznij buforowanie.
Czasami, biorąc pod uwagę ograniczenia twojej aplikacji i sprzętu, możesz nie być w stanie tak bardzo poprawić wydajności backendu - ale to jest sens buforowania - aby zminimalizować użycie backendu.
Dalsza lektura
źródło
memory_limit
zostało wskazane w innym poście , że nie pomaga w wydajności.