Co wszystko przyczynia się do czasu wykonania strony Drupal?

17

Mam witrynę, którą badam, która ma poważne problemy z wydajnością, dzięki memcache udało mi się zmniejszyć liczbę zapytań zarówno pod względem liczby, jak i całkowitego czasu oczekiwania (od 3 sekund do 230 ms), ale czas wykonania strony mi umyka (jestem patrząc na wartości wyprowadzane przez devel) rozumiem, że czas wykonania strony = czas potrzebny na wykonanie php, dlatego zainstalowałem APC i widzę buforowanie kodu operacyjnego php i statystyki pokazujące trafienia w panelu sterowania APC (apc.php dostarczany z APC), ale mój czas wykonania strony nie spada. Myślę więc, że moje pytanie jest dwojakie:

  • Co wszystko przyczynia się (lepiej spowalnia) czas wykonywania strony? Czy to tylko czas potrzebny na wykonanie php?
  • Jakie podejścia powinienem zastosować, aby skrócić czas wykonywania strony. Próbowałem APC, ale niewiele pomocy

Liczba modułów PS użytych na tej stronie jest po prostu ogromna (168), ale w tej chwili nie jestem w stanie wydać tego zalecenia, bardziej przypomina to pożar w dziurze.

Edycja: Dane wyjściowe uruchamiania xhprof na lokalnej instancji (zalecane przez mikeytown), wydaje się to szalone. Myślę, że późniejsze wyniki są spowodowane thrashowaniem? Uruchamianie różnic dla tego samego adresu URL ma drastyczną różnicę i zbyt duże zużycie zasobów. Nie jestem również pewien, dlaczego pokazuje wartości, które nie pochodzą z dzisiaj: | (Właśnie zainstalowałem xhprof na tym laptopie)

Dane wyjściowe uruchamiania xhprof w lokalnej instancji

Dipen
źródło

Odpowiedzi:

4

Uzyskaj cachegrind swojej witryny. xdebug lub xhprof mogą go wygenerować. Dzięki temu dowiesz się, jakie funkcje trwają najdłużej. Dopóki tego nie zrobisz, jest to gra polegająca na zgadywaniu.

mikeytown2
źródło
Hej, dzięki za sugestię, że właśnie uruchomiłem xhprof na mojej lokalnej wersji programistycznej (laptop nie na serwerze) i widzę to - picasaweb.google.com/lh/photo/… Czy to prawda? Mam na myśli, czy strona może w ogóle zużyć 750 MB pamięci?
Dipen
Czy to może być thrash? później profilowane dane dla tego samego adresu URL, jeśli spojrzysz na dół ten sam adres URL zajmuje znacznie mniej zasobów, ale przebieg różnic pokazuje całkowicie różnice i ekstremalne wykorzystanie zasobów.
Dipen
1
To naprawdę zależy, ale dla 99,9% konfiguracji, jeśli używasz ponad 100 MB pamięci RAM, coś jest nie tak.
mikeytown2
Czy oprócz liczby modułów może być coś jeszcze nie tak? Nie jestem pewien, czy moduły można od razu usunąć z produkcji. Btw, lokalnie używam nginx + php-fpm, a podczas produkcji strona używa dużej prędkości z szybkim cgi.
Dipen
1
Musisz zgłębić cachegrind i wypisać, jakie funkcje pochłaniają cały twój czas. img715.imageshack.us/i/cgrindout.png
mikeytown2
1

EDYCJA: Źle odczytałem oryginalny post. 168 modułów to dużo, a od 300 do 700 ms zapytań SQL jest ogromne . Im więcej modułów użyjesz, tym więcej zapytań znajdą się, gdy tylko moduły zrobią.

Używaj agresywnego buforowania, póki możesz, buforuj wszystko, jeśli to nie wystarczy, spróbuj odwrócić bufor proxy. Używanie CDN do plików może znacznie poprawić całość. Odwrotna pamięć podręczna proxy może również pomóc, usuwając niektóre uwierzytelniające pliki cookie podczas odwiedzania stron, które jej nie potrzebują (wówczas rdzeń będzie uważał, że użytkownik jest anonimowy dla tych danych i zmaksymalizuje buforowanie).


Dynamika rdzenia Drupala spowalnia cały świt, gdy tylko zbyt wiele modułów oddziałuje jednocześnie.

Powiedziałbym na przykład, że jeśli użyjesz wielu modułów, które ładują dane w czasie hook_node_load () zamiast używać pól, spowoduje to wiele zapytań, podczas gdy użycie pola zapewniłoby wydajność buforowania.

Renderowanie może również zająć dużo czasu, drupal_render () (kiedyś wywoływany interfejs API renderowania) to niezły kawałek API (naprawdę przydatny), ale także trochę powolny. Przejście na PDO (D7) i pełne DBTNG (co jest świetne, nawiasem mówiąc) również dodaje niezauważalne opóźnienie.

To powiedziawszy, rdzeń sam w sobie jest dość szybki (ale wykonuje zbyt wiele zapytań SQL, nawet przy prawie niczego nie zainstalowanym), źle zakodowane moduły często stanowią wąskie gardło.

APC może podzielić czas wykonania na 2 lub 3, w zależności od uruchomionego kodu. jeśli dobrze go skonfigurujesz (włączysz wszystkie optymalizacje APC, oficjalna instrukcja APC jest dobrze napisana i poprowadzi cię).

Jeśli używasz wolnego systemu plików (sieciowego systemu plików lub wolnego dysku twardego), może to oznaczać widoczny wpływ na czas wykonywania. Drupal składa się z wielu małych plików, co zmusza PHP do wykonywania operacji wejścia / wyjścia na FS za każdym razem, gdy ładuje jeden z nich (APC również bardzo w tym pomaga).

Błędnie skonfigurowany DBMS może być również brzydkim wąskim gardłem, jeśli używasz MySQL, pomyśl o dostrajaniu. Jeśli korzystasz z hostingu współdzielonego, jeśli nie jest on specyficzny dla Drupala (lub gotowy), DBMS i stos PHP prawdopodobnie będą źle skonfigurowane lub nie dostrojone, co może prowadzić do naprawdę wolnych stron.

Nie zapomnij aktywować wszystkich pamięci podręcznych. Jeśli Twoja witryna nie jest uwierzytelniona zorientowana na użytkownika, aktywuj agresywne buforowanie strony (to naprawdę niesamowite).

Im więcej będziesz mieć bloków, tym więcej pełnych stron będzie powolnych, bloki modułów Widoku będą wąskim gardłem (w zależności od używanych wtyczek Widoku blok OG może być prawdziwym bólem), jeśli nie ograniczysz ich widoczności na stronie lub z niestandardowym kodem PHP (każdy inny blok również zawsze ustawia widoczność bloku ręcznie, bardzo pomaga ramie, unikając próby renderowania pustych bloków).

Unikaj modułów korzystających z hook_init (), hook_init () jest uruchamiany na każdej stronie, nawet jeśli dostajesz 403 lub 404, co spowalnia wszystko (nawet spowalnia czas generowania obrazu w stylu imagecache i błędy 404 na plikach byłyby świt powoli, aby powiedzieć, że plik nie istnieje).

Pierre
źródło
Cześć, tutaj, kiedy mówię o czasie wykonania strony, mam na myśli wartość pokazywaną przez moduł devel na dole strony i nieużywanie jej w ogólnym sensie cyklu zapytań / odpowiedzi drupal, który obejmuje również zapytania SQL itp. Moje pytanie brzmi w kontekście uwierzytelnionego użytkownika. Więc kiedy devel raportuje czas wykonania strony, czy obejmuje to również zapytania SQL?
Dipen
Nie jestem pewien, czy system plików byłby wąskim gardłem, ponieważ korzystam z systemu plików Linux 15k RPM. Zapytania SQL zajmują około 300-700 ms w zależności od strony, ale czas wykonania strony ~ = 3 s (zgłoszony przez devel). Nie jestem pewien, co jeszcze może być problemem.
Dipen
Przepraszam, źle odczytałem twój oryginalny post. Wartość Devel jest obliczana od rozruchu do zamknięcia (moduł devel ma własną obsługę PHP zamykania do robienia wielu rzeczy, w tym tego). Nie jestem pewien, kiedy dokładnie się zaczyna i kończy, ale prawie cały czas budowy strony Drupal i specyfika biznesowa są uwzględnione w tym czasie wykonania strony. Tak, zawiera wszystko (w tym czas i opóźnienie zapytania SQL), a także własne opóźnienie (rejestrowanie zapytań podczas projektowania ma również wpływ na wydajność).
Pierre