Najlepsze ustawienia APC w celu skrócenia czasu wykonywania strony

15

Mam Drupal 7, apc z php-fpm i apache za lakierem i 512 MB pamięci RAM.

Czas wykonania strony mierzę za pomocą modułu devel.

Czas zapytania do bazy danych jest niski (62 ms) w porównaniu do czasu wykonania strony, który wynosi 854 ms. Oznacza to, że występuje problem z ustawieniami PHP i APC.

Moje obecne ustawienia są po prostu

apc.shm_size = 64
apc.stat=1 

Jak mogę poprawić?

Jakie są najlepsze ustawienia dla Drupala, biorąc pod uwagę powyższą konfigurację?

Dzięki

Jan
źródło

Odpowiedzi:

12

Działamy w środowisku push SVN, więc pamięć podręczną pliku apc czyścimy tylko za pomocą skryptu.

Ustawienia APC:

apc.ttl=604800
apc.user_ttl=3600
apc.shm_size=192M
apc.include_once_override=1
auto_globals_jit=Off
apc.num_files_hint = 2048

apc.stat_ctime = 0
apc.file_update_protection = 2
apc.stat = 0

Skrypt PHP:

<?php
$return = apc_clear_cache('opcode');
echo var_export($return);

604800 = 1 tydzień.

Po tym, uruchomienie xdebug / xhprof i uruchomienie pamięci podręcznej strony powinno dać ci znać, co ją spowalnia. Krótko mówiąc, analiza wyniku mielenia pamięci podręcznej jest najlepszym sposobem na przyspieszenie Drupala. Poniżej wymienię, jakich poprawek i modułów używamy do przyspieszenia; w twoim przypadku najprawdopodobniej będzie inaczej.

Drupal 6 Szczegółowa odpowiedź poniżej

Gdy miniesz ten punkt i zdasz sobie sprawę, że APC nie da ci tego, czego szukasz, przełącz się na przepływ prasy i daj się ponieść tym łatkom :

Wypróbuj również niektóre z tych modułów, ponieważ znacznie poprawiły one szybkość naszych witryn:

mikeytown2
źródło
Bardzo dziękuję za odpowiedź, ale mam Drupal 7.
Jan
Więc weź części APC i części xdebug / xhprof i spójrz na łatki D6 jako przykład tego, czego szukać w kolejce do wydania. Wszystkie powyższe poprawki, w wyniku których patrzenie na skrzynkę zaciera się, znajdowanie punktu bólu i znalezienie odpowiedniego problemu. Szybki start: drupal.org/project/issues/search/…
mikeytown2
Istnieje teraz wiki wydajności drupal 7: groups.drupal.org/node/210683
mikeytown2
1
Po prostu FYI, musiałem skomentować wiersz apc.include_once_override = 1, ponieważ złamałem stronę puregin.org/node/2550/3928
corbacho
php.net/apc.configuration#ini.apc.include-once-override Dziękujemy za zwrócenie na to uwagi. W zależności od wersji PHP i APC może to powodować problemy
mikeytown2,
3

To jedno z tych „jak długi jest ciąg pytań”.

To, co jest dobre dla witryny o dużym wolumenie, może nie być takie samo dla witryny o niskim wolumenie z dużą liczbą modułów i może nie być takie samo dla witryny o dużej objętości z włączoną tylko kilkoma modułami. Inne witryny działające na serwerze mogą również jeść w pamięci dostępnej przez APC.

Mój punkt wyjścia to

apc.enabled=1
apc.shm_segments=1
apc.shm_size=64
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.rfc1867=1

Następnie dostosowuję ustawienia serwera, ale znowu, nie ma jednego rozmiaru pasującego do wszystkich ustawień.

Znajdź apc.php (prawdopodobnie znajduje się w /usr/share/pear/apc.php) i zainstaluj go w DOCROOT dla twojej instalacji Drupal. Zablokuj go do swojego adresu IP za pomocą konfiguracji Apache. Edytuj nazwę użytkownika / hasło w środku, a następnie przejdź do niego. Zobaczysz wtedy swoje statystyki APC.

Ponownie skonfiguruj parametr shm_size, aby zminimalizować błędy w pamięci podręcznej. Idealnie byłoby, gdybyś miał wystarczająco dużo pamięci, aby nigdy nie brakowało pamięci podręcznej dla pliku, a także dodatkową pamięć dla pamięci podręcznej użytkownika APC.

Zoptymalizuj TTL, aby zapobiec rezygnacji z pamięci podręcznej. Jeśli nie edytujesz plików, możesz podnieść ten numer.

enable_cli jest przydatne, gdy często używasz drush, dzięki czemu drush używa buforowanych plików z APC.

rfc1867 jest przydatny do przesyłania plików.

W tytule zauważyłem również php-fpm. To komplikuje sprawy i naprawdę wykracza poza zakres Drupal Answers. Możesz uzyskać lepsze odpowiedzi w przypadku awarii serwera , ponieważ wiele ustawień konfiguracji systemu nie dotyczy bezpośrednio Drupala.

mpdonadio
źródło
gdzie jest jakiś dobry tutorial, który wyjaśnia w prostym języku, co robią poszczególne ustawienia, takie jak ttl, segmenty itp.? jak cli pomaga z drush?
Jan
Czy możesz wyjaśnić, w jaki sposób „otrzymuję ruch, co jeszcze działa na serwerze, jakie moduły zainstalowałem itp.” wpływa na ustawienia? dzięki
John,
powyższe ustawienia niewiele pomogły. Czy powinienem spróbować xhprof, aby zobaczyć, co dzieje się z php?
John
Wszystkie ustawienia APC są opisane na stronie php.net/manual/en/apc.configuration.php
mpdonadio
1
@MPD> enable_cli jest przydatne, gdy często używasz drush, więc drush używa> buforowanych plików z APC. W rzeczywistości cli jest osobnym procesem i nie dzieli swojej pamięci podręcznej apc z apache, ani nawet między wywołaniami drush.
Robin Millette,
2

APC po prostu usprawnia ładowanie i parsowanie plików PHP. Dużą część stanowi także sam czas wykonania. Istnieje wiele czynników, które mogą wydłużyć czas wykonywania, w tym błędy (szczególnie błędy związane z pamięcią podręczną), narzut wewnętrzny (np. Drupal_alter (), module_implements ()) i tak dalej.

Tak jak prosiłeś i został już zasugerowany przez mikeytown2, użyłbym xhprof (obecnie wolę go od xdebug, ponieważ zapewnia bezpośredni, szybki dostęp do wyniku i nie wymaga żadnych dodatkowych narzędzi), aby dowiedzieć się, gdzie są twoje wąskie gardła.

Niedawno napisałem dwa posty na blogu o korzystaniu z xhprof w Drupal i typowych wąskich gardłach , które mogą cię zainteresować.

Berdir
źródło
groups.drupal.org/node/82889 PHP profilowanie z XHprof
John