Meilleurs paramètres APC pour réduire le temps d'exécution des pages

16

J'ai Drupal 7, apc avec php-fpm et apache derrière le vernis et 512 Mo de RAM.

Je mesure le temps d'exécution des pages avec le module devel.

Le temps d'interrogation de la base de données est faible (62 ms) par rapport au temps d'exécution de la page qui est de 854 ms. Cela signifie qu'il y a un problème avec les paramètres PHP et APC.

Mes paramètres actuels sont juste

apc.shm_size = 64
apc.stat=1 

Comment puis-je m'améliorer?

Quels sont les meilleurs paramètres pour Drupal compte tenu de la configuration ci-dessus?

Merci

John
la source

Réponses:

12

Nous fonctionnons dans un environnement push SVN, nous ne nettoyons donc le cache de fichiers apc qu'avec un script.

Paramètres 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

Script PHP:

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

604800 = 1 semaine.

Après cela, obtenir et exécuter xdebug / xhprof et effectuer une mouture du cache du site devrait vous permettre de savoir ce qui ralentit le site. En bref, l'analyse de la sortie de la mouture du cache est le meilleur moyen d'accélérer Drupal. Ci-dessous, je liste les correctifs et modules que nous utilisons pour l'accélérer; dans votre cas, ce sera probablement différent.

Drupal 6 réponse spécifique ci-dessous

Une fois que vous avez dépassé ce point et que vous vous rendez compte que l'APC ne vous donnera pas ce que vous recherchez, passez à pressflow et tournez ces correctifs:

Essayez également certains de ces modules car ils ont considérablement amélioré la vitesse de nos sites:

mikeytown2
la source
Merci beaucoup pour votre réponse, mais j'ai Drupal 7.
john
Prenez donc les parties APC et les parties xdebug / xhprof et regardez les correctifs D6 comme exemple de ce qu'il faut rechercher dans la file d'attente des problèmes. Tous les correctifs ci-dessus résultaient de l'examen du cache, de la recherche du point douloureux et de la recherche du problème correspondant. Démarrage rapide: drupal.org/project/issues/search/…
mikeytown2
Il existe maintenant un wiki de performance Drupal 7: groups.drupal.org/node/210683
mikeytown2
1
Juste pour info, je devais commenter la ligne apc.include_once_override = 1 car a cassé le site puregin.org/node/2550/3928
corbacho
php.net/apc.configuration#ini.apc.include-once-override Merci de l'avoir signalé. Selon la version de PHP et APC, cela peut provoquer des problèmes
mikeytown2
3

C'est l'un de ces "combien de temps est un morceau de questions de chaîne".

Ce qui est bon pour un site à volume élevé peut ne pas être le même pour un site à faible volume avec beaucoup de modules, et peut ne pas être le même pour un site à volume moyen avec seulement quelques modules activés. D'autres sites exécutés sur le serveur peuvent également consommer de la mémoire disponible pour APC.

Mon point de départ est

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

J'ajuste ensuite les paramètres du serveur, mais encore une fois, il n'y a pas de taille unique pour tous les paramètres.

Recherchez apc.php (probablement situé dans /usr/share/pear/apc.php) et installez-le dans DOCROOT pour votre installation Drupal. Verrouillez-le sur votre adresse IP via la configuration Apache. Modifiez le nom d'utilisateur / mot de passe à l'intérieur, puis recherchez-le. Vous verrez alors vos statistiques APC.

Reconfigurez le paramètre shm_size pour minimiser les erreurs de cache. Idéalement, vous voulez lui donner juste assez de mémoire pour ne jamais manquer de cache pour un fichier, ainsi que de la mémoire supplémentaire pour le cache utilisateur APC.

Optimisez le TTL pour éviter la saturation du cache. Si vous ne modifiez pas de fichiers, vous pouvez augmenter ce nombre.

enable_cli est pratique lorsque vous utilisez beaucoup drush, de sorte que drush utilise les fichiers mis en cache d'APC.

rfc1867 est pratique pour les téléchargements de fichiers.

J'ai également remarqué le php-fpm dans le titre. Cela complique les choses et dépasse vraiment la portée de Drupal Answers. Vous pouvez obtenir de meilleures réponses à Server Fault , car la plupart des paramètres de configuration du système ne concernent pas directement Drupal.

mpdonadio
la source
où est un bon tutoriel qui explique dans un langage simple ce que fait chaque paramètre, comme ttl, segments, etc.? comment cli aide avec drush?
john
Pourriez-vous s'il vous plaît expliquer comment "le trafic que j'obtiens, ce qui fonctionne sur le serveur, quels modules j'ai installés, etc." affecter les paramètres? merci
john
ces paramètres ci-dessus n'ont pas beaucoup aidé. Dois-je essayer xhprof pour voir ce qui se passe avec php?
john
Tous les paramètres APC sont décrits sur php.net/manual/en/apc.configuration.php
mpdonadio
1
@MPD> enable_cli est pratique lorsque vous utilisez beaucoup drush, de sorte que drush utilise les fichiers mis en cache d'APC. En fait, le cli est un processus distinct et ne partage pas son cache apc avec apache, ni même entre les appels à drush.
Robin Millette
2

APC améliore simplement le chargement et l'analyse des fichiers PHP. Une grande partie est également le temps d'exécution lui-même. De nombreux facteurs peuvent augmenter le temps d'exécution, notamment les bogues (en particulier les bogues liés au cache), les frais généraux internes (par exemple, drupal_alter (), module_implements ()), etc.

Comme vous l'avez demandé et déjà suggéré par mikeytown2, j'utiliserais xhprof (je le préfère à xdebug de nos jours car il fournit un accès direct et rapide au résultat et ne nécessite aucun outil supplémentaire) pour savoir où se trouvent vos goulots d'étranglement.

J'ai récemment écrit deux articles de blog sur l' utilisation de xhprof dans Drupal et des goulots d'étranglement typiques , qui pourraient vous intéresser.

Berdir
la source
groups.drupal.org/node/82889 Profilage PHP avec XHprof
john