Wordpress sur une part Gandi en mode turbo

le 29 octobre 2009 à 12:50 par mrboo

Ce blog tourne sur une unique part de serveur Gandi VPS.
Lors de l’installation (hier) mon billet a été relayé sur Twitter, ce qui a entrainé l’arrivée, d’un coup, de quelques dizaines (centaines ?) de visiteurs => Apache a lâché l’affaire et j’ai eu le droit à des erreurs dans les logs liées à la surcharge.

Certes, une part Gandi ça représente l’équivalent d’un CPU à ~1Ghz avec 256Mo de ram (bust à 2Go) et comme nous l’avons vu les accès disques sont relativement rapides.
Alors d’où venait le problème ?
Apache2 est un serveur très modulable (d’où son nom) mais son défaut vient de sa lourdeur: la moindre page de ce blog lui demande 20Mo de mémoire et 20% du processeur de la machine.
Trop d’accès simultanés, Apache met de plus en plus de temps à générer les pages, l’ensemble des ressources mémoire et CPU sont trustées => Apache se met en vrac, page blanche sur le serveur…

Pour avoir une petite idée de la réactivité de votre Apache une simple ligne de commande :
ab -n 200 -c 5 http://www.url_de_votre_site.fr/
Hier soir, dans la conf Gandi par défaut il m’annonçait qu’Apache réussissait à générer 0,7 pages par seconde (c’est trop peu)
J’ai donc mis les mains dans le cambouis (je n’ai pas trouvé le courage de passer à un serveur léger comme nginx).

1- GandiAI ajoute à la conf de chaque domaine (/etc/apache2/sites-enabled) une ligne pour limiter la consommation CPU via mpm_peruser_module. C’est dommage car même si on augmente le nombre de parts Gandi, le serveur semble malgré tout bloquer le rush de visites… (j’ai testé hier avec 16 parts Gandi -> page blanche)
(je l’ai donc supprimé)
2- Je n’ai gardé que les modules Apache nécessaires à mon Wordpress (désactivation un à un avec un refresh du blog à chaque fois).
3- J’ai ensuite installé eaccelerator, en utilisant un ramdisk pour stoker son cache, histoire de booster PHP/Apache2
4- J’ai installé memcached avec son plugin pecl pour PHP5
5- Enfin j’ai installé w3-total-cache en lui demandant d’utiliser memcache.

Résultat des courses, le benchmarck d’Apache m’annonce désormais 115 pages par seconde :)
Ce qui donne un apache 164 fois plus réactif…

Bien sur cela ne concerne que la partie Apache, si 500 personnes demandent 500 pages de ce blog d’un coup il est très probable que la base MySQL ralentisse le tout et que la bande passante (5 Mb garantis) n’arrange rien.
Mais pour un dédié virtuel à 15€/mois ça me semble acceptable ;)
Il ne reste plus qu’à voir la stabilité du tout, mais ça, seul le temps nous le dira.

nasa

16 commentaires pour “Wordpress sur une part Gandi en mode turbo”

Aller au dernier commentaire | retourner à la racine du blog
  1. 1Julien dit :

    Merci pour ce retour d’expérience.

    Maintenant il serait intéressant de voir l’équivalent en perf sur un RPS1.
    Je ne souhaite pas défendre le RPS, mais pour la culture c’est vraiment intéressant ce genre de retour.

    En effet, si tu mets tout en RAM, le meilleur CPU ainsi que la quantité de RAM (512mo) d’un RPS1 serait peut être d’une grande aide.
    Il te reste un peu de temps sur ta location ?

  2. 2sid dit :

    Bah là, la vitesse d’affichage de ton blog est juste sidérante !!

    Moi qui bataillais avec mon wp, wp super cache et ma dedibox, je crois que je vais gouter à ta recette miracle en testant eaccelerator et memcache.

    Merci !

  3. 3mrboo dit :

    Julien> je vais essayer de trouver le temps ce soir.

    sid> sinon tu peux juste changer le répertoire de wp-super-cache ($cache_path dans /wp-content/wp-cache-config.php) par un répertoire en ram (cf le lien dans mon billet)
    ça devrait déjà donner un bon coup de fouet.

  4. 4Louis dit :

    La vitesse est bluffante effectivement.

    Deux choses. Pourrais-tu donner les modules Apaches que tu as gardé (ou bien ceux que tu as viré) ?

    Et si possible le gain de temps que tu as gagné via cette technique (c’est à dire le gain de temps déjà gagné à cette étape).

    Merci d’avance !

  5. 5mrboo dit :

    Louis>
    J’ai gardé :
    alias
    auth_basic
    authn_file
    authz_default
    authz_groupfile
    authz_host
    authz_user
    autoindex
    deflate
    dir
    env
    expires
    headers
    mime
    negotiation
    php5
    rewrite
    setenvif
    status

    Le gain n’était pas ultra flagrant (surtout les relevés étaient erratiques) je dirais ~10%

  6. 6Philippe dit :

    Je tourne sur la même config mais avec eaccelerator + wp-supercache. Tu lui a mis quelle taille à ton cache ? Pour wp-supercache, j’ai 6-7Mo mais pour eaccelerator j’ai beaucoup plus (mais je n’utilise pas que wordpress aussi comme appli PHP)

  7. 7Gonzague dit :

    « Apache2 est un serveur très modulable (d’où son nom) mais son défaut vient de sa lourdeur »

    Techniquement le problème c’est plutôt WordPress ;-)

  8. 8mrboo dit :

    Philippe> j’ai mis 16 Mo pour le ramdisk et 8 Mo pour memcache.

  9. 9Louis dit :

    @mrboo : merci pour ta réponse. Je suis d’avis que (comme tu l’as dit), allier wp-supercache à un ramdisk commence déjà à bien décrasser l’apache, mais encore faut-il avoir accès a la RAM (foutue offre clef-en-main :-( ).

  10. 10William DURAND dit :

    Bonjour,

    Moi, je n’y arrive pas…
    Un AB me donne de pauvres résultats sur une part Gandi. J’ai installé memcached et APC qui utilise un ramdisk de 32M. Je suis parti d’une install clean Debian, j’ai le minimum de modules Apache et surtout ceux qui vont bien (expires, deflate, gzip, …).

    Côté site web, MySQL est très peu sollicité, les requêtes étant « memcachés ». Plus tout un tas d’optimisations (j’ai dailleurs un billet à ce sujet), le temps de réponse est très satisfaisant puisque l’affichage complet du site est très inférieur à 0,7s.

    J’en conclue que le problème se situe au niveau d’Apache mais je comprend pas. Il ne donne jamais plus de 2 requests per second… Initialement j’étais bien comme toi, à 0,7 requests/s. Des pistes à explorer ?

    Merci d’avance.

  11. 11mrboo dit :

    William DURAND> est-ce que dans la conf de w3-total-cache le test de memcache passe ? de plus, dans le code source de ton blog rien ne semble indiquer que le plugin fonctionne.
    avec 0,7 requests/s tu peux être certain que le cache n’est pas en place.

  12. 12William DURAND dit :

    Bonjour,
    memcached est bien en place, j’ai des logs qui me l’indique (je vérifie également les logs mysql). Deuxième chose, je n’utilise pas Wordpresss, j’ai ou-même developpé l’architecture. Le soucis n’est, selon moi, pas là…
    Je pense avoir un soucis Apache2, en mettant keepalive a off, je passe a 7 requests/s.
    Ce que je ne comprend c’est la grande différence entre tes résultats et les miens ainsi que mes temps entre une exécution et 5 exécutions en concurence…

  13. 13mrboo dit :

    William DURAND> est-ce que le phpinfo t’indique bien la présence du module php memcache ? et si tu fais un test via les fonction php memcache->get / set ça fonctionne ?

  14. 14William DURAND dit :

    Oui tout est ok.
    50% des requêtes sont rendues en 15000ms… Mais en surveillant mes processus, ni le CPU ni la Ram ne sont saturés outre mesure.

  15. 15nas dit :

    Saluté !
    mais c’est super tentant tout ça !
    Et pour un petit noob que je suis un tuto serait vraiment bienvenue !!
    vi vi :) pour Noel :) ce serai vraiment super cool !
    héhé
    merci@++

  16. 16Steph (Technofeliz) dit :

    Merci pour les infos.

    Je plussoie pour le tuto… :)
    Et je pense même que ça vaut le coup de rajouter une info dans le wiki ou le forum Gandi… ;)

Vu sur Twitter

Voici quelques tweets qu'il me semble intéressant de relayer ici.

@erictartanson Fed Up With Facebook Privacy Issues? Here's How To End It All http://bit.ly/4KRmv6
@Kriisiis Complément d'infos au sujet de la tablette Apple : les dev's créent déjà les premières applications http://bit.ly/7q99gC
@mrboo Firefox 3.5 est désormais le navigateur le plus présent sur la toile :o) http://bit.ly/5LR5NH bravo Mozilla & @nitot
@bdescary YouTube offre à son tour des URL courtes! -sur descary.com http://bit.ly/7Yr9Oc #fb
@mrboo Allez, une vraie photo histoire d'agrémenter le livefeed Twitter de mon blog ;o) http://twitpic.com/tuqoz

@pressecitron Twitter publie ses Top Trends pour 2009 http://goo.gl/fb/5v88
@rdesbonnet If you want to generate PDF with PHP, please use TCPDF because FPDF is realy old http://bit.ly/5DiYlZ
@rww Google Releases API for Cool Visualization of Data Mashups from Many Sources http://bit.ly/714YHI
@mrboo ça chauffe entre Google et Mozilla ? http://bit.ly/86xy6A regardez ce bouton vu sous Firefox: http://twitpic.com/t206d

@mrboo Le CEO de Facebook a rendu publiques ses photos perso à cause des "new privacy settings" http://bit.ly/8owBaM (lol non?)
@maxime ./maxime.sh : APE, enfin du vrai push pour le Web http://bit.ly/6yV8m9
@MarleneSchiappa Rétrospective Yahoo 2009: Maman Travaille en est ! ("La famille est morte, vive la famille !") http://bit.ly/4nAxCL
@leweb Google launches realtime search a few hours before Marissa Mayer's keynote at #leweb HOT http://ping.fm/d4vIu
@fred_montagnon Combien de Retweet en français sur les 60 dernières minutes? Sur la journée? Réponse: http://bit.ly/8aTxO0
@DamiendB Franck Prime=frederic Lefevbre, meme combat? >> http://cbwebletter.fr/2009/12/07/twitter-le-redoutable-petit-dernier-du-net/#more-1522
@mrboo Fusion de Wikio et eBuzzing : http://bit.ly/8BUUPy bravo à @kelman ainsi qu'aux fondateurs de eBuzzing (Bertrand et Amaury)
@epelboin Square : un des fondateurs de Twitter lance un service de paiement par mobile http://bit.ly/8zR5za
@laurentbayard Les 5 gros changement de deisgn sur la nouvelle version de facebook a venir... http://bit.ly/53ARlN #fb
@PierreTran Web de flux, web de fond : Matt Mullenweg voit une complémentarité http://bit.ly/617wFf #rwwfr (par @epelboin)
@jmgall How to Install #SnowOSX Universal http://bit.ly/4XE4lV #hackintosh #osx86 /via @taranfx