web-dev-qa-db-fra.com

WordPress MySQL & PHP Performance

avoir un site Web (www.americanbankingnews.com) qui obtient 40 000 à 50 000 pages vues aujourd'hui. Il est actuellement installé sur un serveur Xeon quadricœur dédié avec 8 Go de RAM. Le site est propulsé par WordPress et MySQL (assis sur le même serveur) et j'utilise actuellement W3 Total Cache pour la mise en cache de requêtes page et MySQL.

Malheureusement, cela ne semble pas être suffisant. Pendant les heures de pointe, mes serveurs reçoivent quelques erreurs HTTP 500 et les pages non mises en cache se chargent lentement.

Je n'utilise actuellement pas Xcache ni aucun autre outil de cache/accélération PHP.

Existe-t-il d'autres étapes à suivre pour optimiser les performances de MySQL et de PHP? Ou devrais-je utiliser un serveur supplémentaire? Plus précisément, j'aimerais avoir des suggestions supplémentaires pour améliorer les performances de MySQL et savoir si des outils comme xcache pourraient aider dans cette situation.

4
Matthew Paulson

Bonjour Matthew Paulson,

Je vois que vous utilisez W3 Total Cache mais votre base de données et votre cache d’objets sont configurés sur le disque. La mise en cache d'objets et de votre base de données sur le disque peut avoir un effet négatif sur les performances, en particulier si vous obtenez beaucoup de trafic.

Vous pouvez en savoir plus sur les effets sur la mise en cache de la base de données et des objets sur le disque dans un article que j'ai écrit sur la façon deconfigurer W3 Total CacheL'auteur du plug-in a accepté les instructions de mes paramètres .

Pour vraiment voir les avantages de la mise en cache de la base de données et des objets, vous devez utiliser un cache opcode PHP comme APC. Vous pouvez suivre les instructions de copier-coller du plug-in FAQ pour compiler et configurer APC. Si vous êtes sous Ubuntu ou Debian, vous pouvez simplement exécuter la commande suivante: apt-get apc-php5 à installer.

Comme d'autres l'ont déjà mentionné, vous obtiendrez une amélioration considérable des performances et permettraz à votre site d'évoluer beaucoup plus grand en mettant en place un proxy inverse avec Nginx.

Je donne des instructions détaillées sur la façon de le configurer et de l’installer dans monWordPress Performance Stack.article.

Vous devriez également lire certaines des autres questions et réponses ici. Beaucoup de bons conseils en matière de performances et de dimensionnement ont été donnés.

Bonne chance dans votre quête. Gérer votre propre serveur peut parfois être très stressant.

Edit

Juste pour montrer les performances que vous pouvez obtenir en installant Nginx en tant que proxy inverse, je publie un test de test de performance Apache que je viens d'exécuter sur mon serveur:

x-wing ~: ab -n 1000 -c 80 http://wp-performance.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.Apache.org/

Benchmarking wp-performance.com (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/0.8.54
Server Hostname:        wp-performance.com
Server Port:            80

Document Path:          /
Document Length:        3132 bytes

Concurrency Level:      80
Time taken for tests:   0.066 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      3605000 bytes
HTML transferred:       3132000 bytes
Requests per second:    15164.15 [#/sec] (mean)
Time per request:       5.276 [ms] (mean)
Time per request:       0.066 [ms] (mean, across all concurrent requests)
Transfer rate:          53385.52 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    2   0.6      1       3
Processing:     1    4   0.8      4       5
Waiting:        1    3   0.8      3       5
Total:          3    5   0.6      5       7

Percentage of the requests served within a certain time (ms)
  50%      5
  66%      5
  75%      6
  80%      6
  90%      6
  95%      6
  98%      6
  99%      6
 100%      7 (longest request)

Théoriquement, il est capable de traiter plus de 15 000 demandes par seconde. (Même réseau)

5
Chris_O

Beaucoup de questions et réponses similaires: https://wordpress.stackexchange.com/search?q=mysql+optimize

Cela revient à utiliser des outils - comme mysqltuner - pour étudier les goulots d'étranglement, à la recherche d'erreurs et d'utilisation de la mémoire dans les journaux, à la mise en cache php d'opcode, à la suppression des révisions de publication/page pour obtenir la taille de la base de données, etc.

2
markratledge

Bonjour@ Matthew Paulson:

Vous posez peut-être la mauvaise question.

Avec votre trafic, vous pouvez / souhaitez consulter le cache frontal à l’aide de nginx . Vous trouverez ci-dessous des questions-réponses concernant nginx sur le site, de nombreux articles pertinents dans une recherche Google et un plug-in permettant de relier WordPress à nginx sur wordpress.org et enfin un article sur l'installation et la configuration:

Si cela ne vous aide pas ou si vous ne voulez pas le faire pour une autre raison, veuillez nous faire savoirquels plugins vous utilisez. La plupart du temps avec WordPress, les problèmes de performances ne sont pas une évidence, mais ils résultent plutôt de plugins mal écrits.

1
MikeSchinkel

Avez-vous une idée de ce qui est en train de devenir un goulot d'étranglement lorsque la charge est élevée? Il peut s'agir d'un type de ressource différent (charge du processeur, maintenance des connexions réseau, manque de mémoire, etc.).

Choses générales:

  • Le cache d'opcode (conserver le code PHP compilé en mémoire) est indispensable;
  • vous semblez avoir de la mémoire à graver, il est donc intéressant d'essayer le cache d'objets basé sur la mémoire (W3TC le prend en charge, examinez-le). Cela rendra beaucoup de choses plus persistantes et détournera la charge de MySQL;
  • si le logiciel du serveur Web est un goulot d’étranglement (vous ne précisez pas ce que vous exécutez, Apache?), vous voudrez peut-être consulter serveur Web alternatif (comme nginx) ou proxy inverse (encore une fois - vous avez de la mémoire brûler, j'ai entendu de bonnes choses à propos de Varnish).
0
Rarst

Vous ne rigoliez pas, essayez simplement d’aller sur votre site et obtenez une erreur interne de 500. Peut-être pouvez-vous réduire le nombre de plug-ins que vous utilisez et vous assurer que toutes les images sont optimisées, etc. afin de réduire la taille des pages afin qu'elles utilisent moins de bande passante pour charger moins d'erreurs.

Vous voudrez peut-être aussi regarder dans HIP HOP pour PHP . Je ne l'ai jamais implémenté, mais il a été publié en open source par les utilisateurs de facbook qui, après l'avoir créé et utilisé, ont vu leur charge de serveur diminuer d'environ 30%. Fondamentalement, il prend des fichiers php réguliers, les convertit en binaires C++ et les sert.

0
user4511

Le matériel dont vous disposez devrait facilement supporter le trafic déclaré (en tant que référence, un site sur lequel je cours pointe à environ 40 000 pages vues par jour sur un VPS Slicehost de 2 Go), ce qui laisse à penser que quelque chose ne va pas du tout.

Ainsi, comme d’autres personnes l’ont dit, la première chose à faire est de comprendre où se trouvent les problèmes.

  1. Quelles informations top vous donne-t-il lorsque vous êtes sous charge? Utilisez-vous de la mémoire d'échange, votre charge augmente-t-elle lorsque vous triez par mémoire et par cpu% quels sont les principaux processus?

  2. Pouvez-vous installer quelque chose comme munin pour vous donner un aperçu de votre serveur?

  3. En supposant que vous utilisez Apache, comment est-il configuré? Ce qu'il faut savoir, c'est:

    • Temps libre
    • Rester en vie
    • MaxKeepAliveRequests
    • KeepAliveTimeout
    • (en supposant que vous utilisez Apache en mode prefork) - toutes les lignes de configuration de la section prefork de votre fichier de configuration Apache.
  4. Si vous exécutez cette commande, ps -ylC httpd --sort:rss vous indiquera la quantité de mémoire utilisée par les processus Apache.

  5. Installez mtop et mysqltuner - d'après ce dont je me souviens, les deux sont disponibles via apt-get. Vous devriez également activer la journalisation lente de MySQL - vous devez normalement ne pas commenter une ligne de votre fichier my.cnf.

    • mtop vous donne une vue en temps réel des requêtes SQL en cours d'exécution (lentement). mysqltuner vous donnera une idée des modifications à apporter à votre configuration MySQL
  6. Comme suggéré par d'autres, que se passe-t-il si vous désactivez les plugins pendant une période occupée? Le site accélère-t-il? Quels plugins avez-vous installé?

  7. Avez-vous une idée du trafic que vous avez lors de vos périodes d'affluence - par exemple, 4000 pages vues en 10 minutes.

Armés d'informations provenant de ces sources, vous aurez une bien meilleure idée de ce qui ne va pas.

0
anu

je ne sais pas quels programmes vous avez installés, mais peut-être que son problème APC - Zend:

http://www.ivankristianto.com/web-development/server/alternative-php-cache-apc-not-compatible-with-zend-optimizer/1726/

Ce problème se produit dans mon VPS après avoir installé Alternative PHP cache (APC). Et aussi j'ai déjà optimiseur Zend installé sur le même VPS. Après avoir installé APC, mon blog WordPress affiche un comportement étrange. Parfois, j'ai l'erreur 500 Erreur interne du serveur, et parfois j'ai l'erreur fatale PHP.

0
Ünsal Korkmaz