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

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:


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.


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


groups.drupal.org/node/82889 PHP profilowanie z XHprof
— John
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.