Profiling Apache + Mysql + server Php – qui est le goulot d'étranglement?

Comment profil un server Linux + Apache + Mysql + Php pour la vitesse?

J'ai un server avec une instance MediaWiki fortement modifiée s'exécutant sur Ubuntu 8.04. C'est un peu léthargique – je n'ai rien fait pour l'optimiser, alors je suis sûr qu'il y a beaucoup de fruits à faible pression pour le rendre un peu plus rapide.

Mais pour optimiser, vous devez mesurer en premier. Comment savoir lequel des composants (Apache, Php, Mysql) prend le plus grand nombre de fois pour servir une page?

Eh bien, lorsque votre profil de cette façon de find le goulot d'étranglement, vous devez régler les choses un par un. Vous aurez besoin d'une ligne de base pour get des comparaisons. Si vous avez installé l'outil "ab" (il vient avec apache), vous pouvez l'utiliser.

Pour get votre base de reference, je recommand d'get la moyenne d'au less quelques centaines de requests. Voici un exemple:

$ ab -n 400 http://yousite/ 

Regardez les résultats pour la ligne "Temps par request", il ressemblera à:

 Time per request: 96.031 [ms] (mean) 

Prenez note de cette période car il s'agit de la ligne de base.

Pour exclure apache que le coupable crée une page statique sur votre server (sauvegardez simplement le html d'une page que vous considérez comme lente ou lente) et exécutez ab à nouveau.

Jette du PHP dans la page statique. Il ne faut pas qu'il s'agisse d'une grande quantité, mais il devrait effectivement faire du travail. MediaWiki est un code assez bon, alors s'il y a un goulot d'étranglement PHP sur votre système, mon argent serait sur le chargement réel de la stack PHP dans la memory et réévaluer le test.

Regardez les trois numbers et voyez où le plus grand saut est entre le prochain pas en avant. Mon pari serait sur MySQL étant le plus lent des trois, mais il pourrait très bien être que vous chargez beaucoup d'images sur une page qui ralentissent le time de request total auquel cas vous voudrez repenser la design de la page.

Zombat et Frank Farmer ont quelques belles suggestions (j'aime la suggestion de requête lente, moi-même) à Stack Overflow 697802 . ab pour apache est également très utile pour tester les modifications que vous effectuez.

Nous exécutons une installation MediaWiki de bonne taille et nous avons rapidement remarqué que MediaWiki bénéficie grandement d'une instance memcached. Sinon, il doit charger beaucoup de files de langue et de données user sur chaque request.

La configuration du module prefork est également extrêmement importante. J'ai réduit considérablement les nombres dans la section spécifique de /etc/apache2/apache2.conf .. Depuis lors, j'ai eu une latence massive, où la page serait bloquée jusqu'à une minute avant de terminer le chargement … le traçage avec les modules de trace et de développement de Drupal, ainsi que le profilage avec xdebug m'a laissé clueless .. j'ai configuré APC et modded la conf MYSQL mais le coupable en fait étaient les valeurs trop faibles pour le module prefork .. j'ai soulevé ceux à un niveau modéré et suffisant et maintenant le server est de return à la foudre rapidement. Faites attention à ces numbers si vous avez des time inexplicables d'exécution de la page haute ….

 <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 # original values: # MaxSpareServers 10 # MaxClients 150 # far too conservative experimental values: # MaxSpareServers 5 # MaxClients 5 # good compromise: MaxSpareServers 10 MaxClients 20 MaxRequestsPerChild 0 </IfModule> 

Ces valeurs sont pour un environnement hôte virtuel avec 512MiB RAM + 256MiB swap … bonne chance pour find le meilleur de votre server;)