Optimiser PHP pour Drupal

Onglets principaux

La documentation Drupal 6 n'est plus maintenue et en cours de dépublication.

Cette page à pour but de regrouper les différentes astuces permettant d'améliorer les performances de Drupal.

N'hésitez pas à ajouter vos astuces.

Vous ramez avec views?

Views est un module très puissant avec une interface complexe. Il vous est sans doute arrivé d'avoir de gros problèmes de lenteur au moment de charger certains options. Pour rémédier à cela, une solution simple consiste à éditer votre fichier php.ini et lui rajouter la ligne suivante :

output_handler = ob_gzhandler

Il peut arriver que cette configuration pose des problèmes avec la gestion des images. Dans ce cas il est préférable de la laisser en commentaire et plutôt d'activer la compression de sortie zlib :

zlib.output_compression = On

Supprimer les pages blanches de timeout.

Vous avez peut-être eu , après activation de certains modules des pages blanches en réponse à une requête, et des temps de réponse importants. J'ai pu supprimer cet effet désagréable en modifiant le fichier /etc/php.ini, afin d'augmenter la mémoire allouée à PHP : memory_limit=256m

Aussitot après un redémarrage http, plus de problème.

Identifier les problèmes de lenteur

Les causes de problèmes de lenteurs peuvent être multiple : configuration serveur, lenteur des requêtes de bases de données. Vous pouvez effectuer un premier contrôle de performance avec le module performance logging.

Le module Devel permet également de lister les requêtes effectuées sur une page et identifier les plus lentes.

Commentaires

Le timeout et la ram sont à priori deux pbs distincts (cf les messages d'erreur dans les logs).

Allouer 256Mo à php en production me parait aberrant, et accessoirement un bon moyen de crasher le serveur (car si chaque processus peut prendre 256Mo, il y a des chance pour que l'on dépasse rapidement la mémoire disponible, ça va commencer à swapper, donc être plus lent, donc augmenter le nb de processus, donc augmenter la conso de RAM...).

32Mo doivent suffire, sinon pousser à 48 ou 64 mais bien vérifier que c'est compatible avec le maxClient d'apache (Nb Mo pour php x maxClient apache doit rester inférieur à la RAM, et il faut en laisser un peu pour le reste). Par ex, avec 4Go de Ram, si on laisse 2Go pour l'OS et la base de données, à 256Mo/processus php ça donnerait un maxClients apache de 8 ! (64 clients avec 32Mo).

Évidemment, c'est très différent avec php en module (la ram allouée à php l'est pour chaque process apache) ou en cgi (les processus apache et php sont distincts, donc chacun sa RAM, et comme la plupart des requetes web concernent du statique, elle vont concerner des process apache mais pas php ce qui permet d'augmenter la ram pour php sans trop de risque).

Mais si vous rencontrez ce genre de problème de performances, il faut se pencher plus sérieusement sur la conf php/apache, passer en fastCgi, installer memCache, etc. (la littérature est abondante sur la question).

Bonjour

Votre commentaire m'intéresse beaucoup . J'ai également des pages blanches , enfin . Mysql répond , le contenu apparait , mais tout ce qui est design est HS n'apparait pas . Et celui en cas d'effet " digg " .

J'ai mis 128 mo de ram pour PHP , je peux pas plus . J'ai changé de design , pour un plus léger . Le site absorbe la chose . Mais j'ai encore par moment des pages blanche .

Ma config ressemble a çà :

Performance site htaccess OVH

SetEnv ZEND_OPTIMIZER 1
SetEnv PHP_VER 5
FileETag none

PHP 5, Apache 1 and 2.

php_value magic_quotes_gpc 0
php_value register_globals 0
php_value session.auto_start 0
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation 0

Mais çà ne semble pas fonctionner au poil . J'ai trouvé personne qu'il puisse me renseigner sur les fonctionns a garder ou supprimer sur mon PHP core 5.2.13 ... .

Si tu pouvais me filé un coup de pouce , ce serait cool .

Cordialement

Une page blanche est souvent synonyme de pb php, mais c'est une page avec rien dessus ;-)
Si tu as qqchose (tu dis mysql répond et du contenu apparait), c'est que le pb est ailleurs.

Regarde les logs php pour en savoir plus (128Mo de RAM me semblent amplement suffisants).

Salut dcaillibaud

Alors ,les logs donnent çà :

[Wed May 26 06:31:18 2010] [error] [host www.monsite.fr] File does not exist: /robots.txt

ou çà : ( page blanche ou plus de design )

[26/May/2010:12:04:36 +0200] "GET / HTTP/1.1" 304 - "-"

Au lieu de çà : ( écran normal )

[26/May/2010:12:04:33 +0200] "GET /default/files/css/css_4df629acab7493bc204099adcb02895f.css HTTP/1.1" 304 - "http://www.monsite.fr

On s'aperçoit , pour une raison inconnue que le design n'est pas chargé . Est-ce Apache en tord ? .

Cordialement