23 août 2008 §
Les symptômes ?
- Page blanche sur le tableau de bord et la page apparence
- Page blanche lors de la publication d'un article et/ou d'un commentaire
Le problème intervient sur les installations WordPress Mu à haute fréquentation uniquement.
Cause possible ?
Créer un fichier info.php à la racine de votre blog, placez-y :
<?php phpinfo(); ?>
Enregistrez le fichier, consultez la page générée et partez à la recherche de l'extension eAccelerator pour PHP.
Si le module est présent; vous êtes simplement victime d'un bug avec les caches OPcode PHP et les fonctions de filtrage HTML Kses de WordPress. Cela provoque une erreur de segmentation PHP, et hop page blanche.
La solution ?
Désinstallez eAccelerator de votre serveur dédié. Installez à la place l'extension pour PHP, j'ai nommé Alternative PHP Cache (APC).
Et n'oubliez pas de filtrer le fichier kses.php de l'optimisation. Pour cela, ajoutez dans votre fichier de configuration de PHP la ligne suivante:
apc.filters = "(kses.php)"
Redémarrez votre serveur Web et hop problème résolu !
16 mars 2008 §
Lorsqu'on utilise le logiciel de blog b2evolution, et le serveur HTTP Nginx, il se passe un petit bug lors de la connexion à l'administration.
En effet, une fois le login passé, le logiciel part dans une boucle infinie ! Et l'admin est inaccessible... Pas terrible pour blogger...
Pour résoudre ce petit bug, nous allons éditer le fichier admin.php se situant à la racine de b2evolution.
Et à la ligne 22, nous allons remplacer
if( ! empty( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF'] ) // the "!= PHP_SELF" check seems needed by IIS..
Par
if( ! empty( $_SERVER['PATH_INFO'] ) && $_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF'] && 1 == 0 ) // the "!= PHP_SELF" check seems needed by IIS..
Avec cette petite modification, la condition n'est jamais remplie, l'administration fonctionne mais les anciennes url du type "/admin/plugins.php" ne seront plus rediriger vers "/admin.php".
Pour note, la variable PATH_INFO est différente de PHP_SELF, raison pour laquelle la condition est remplie et cela fait tout foirer :)
Mon diagnostic s'arrête la... faute de temps !
8 mars 2008 §
Les chiffres sont basés sur une installation propre de WordPress 2.3 et 2.5, le thème par défaut, aucun plugin actif, sans traduction, et sur le même serveur bien entendu !
Résultat sur la page d’accueil du blog
| |
WordPress 2.3 |
WordPress 2.5 |
| Nombre de fichiers PHP lus |
52 |
55 |
| Nombre de lignes PHP lues |
4691 |
4930 |
| Nombres de requêtes SQL |
23 |
22 |
| Temps moyen de génération (en secondes) (moyenne sur 100 essais) |
0.306 |
0.243 |
| Variables globales |
44 |
47 |
| Consommation mémoire (en ko) |
8762,064 |
9644.776 |
Pas grand chose à conclure au final…
7 mars 2008 §
Votre blog WordPress rame sur votre gros serveur dédié? Voici quelques éléments de réponses…
En effet, j’ai eu l’occasion de tester différents caches (et "optimiseur") OPCode avec une grosse installation de WordPress :
Note: Les plugins permettent à WordPress d’utiliser les caches des utilitaires en lieu et place du système de fichiers (bien plus lent)
Alors, non il n’y aura aucun bench à l’appui de mon discours, juste un retour d’expérience…
APC, XCache et eAccelerator possèdent tous les 3 un point commun. Ceux sont des extensions pour PHP. De ce fait, leur installation est très simple, une ligne en plus dans le fichier php.ini et tout fonctionne ! (ou presque)
A contrario, Memcached n’est pas spécifique à PHP, il peut être utilisé par n’importe quel type de langages… C’est une technologie de cache générique. De ce fait, il est nécessaire d’installer un service sur votre serveur, et une extension à PHP. Autre différence, Memcached n’optimise pas le traitement PHP, il ne fait que de la mise en cache.
Revenons à des choses plus générales…
A quoi sert à ces outils ? A réduire la charge serveur non ?
Donc pour réduire la charge serveur, il faut optimiser l’exécution de PHP pour que ce dernier passe moins de temps sur chaque traitement.
Chose que font a merveille APC, eAccelerator et Xcache avec leur optimisation et cache interne.
Cool ? Non pas vraiment…
Ces outils ont tendance à être plus gourmand en consommation processeur, du coup, le traitement est optimise, plus court probablement, mais la consommation CPU de votre serveur augmente… Donc votre serveur est plus lent…
L’effet recherché n’est pas la…
Que faire alors ?
Que faire alors ?
Et bah contrairement à nos 3 gugusses, Memcached ne gère que la mise en cache, et il le fait très bien, et il le fait surtout de manière économique pour le processeur… Du coup, l’utilisation de Memcached est bien plus efficace.
Alors maintenant, la charge du serveur a baissée… mais les pages mettent toujours 2 secondes pour s’afficher, vu que le code PHP de WordPress n’est pas optimisé…
Un casse tête ? Pas vraiment…
eAccelerator et Memcached fonctionne très bien à 2…
- eAccelerator optimise le code PHP
- Memcached met en cache les résultats et diverses variables PHP
Et voila le duo gagnant, vos page sont rapides, et la charge de votre serveur est correcte…
Quelques chiffres… sur une journée (24h):
- eAccelerator seul : 0.8 (consommation CPU moyenne)
- Memcached seul : 0.6
- eAccelerator + Memcached : 0.4
Le choix coule de source…
Maintenant quelques ressources
Un tutorial pour installer une version récente de Memcached sur une Debian Etch
Il existe un plugin WordPress pour memcache, mais ce dernier utilise une classe d’émulation à la place de l’extension PHP. Cela va s’en dire que les performances sont moindres… vu que le code PHP est plus lent que l’extension en C…
Je mets donc à disposition une classe de cache exploitant l’extension PECL:Memcache et Memcached pour WordPress !
Cette classe est théoriquement compatible avec WPmu, mais je n’ai pas encore testé.
Ryan, un des développeurs de WP, donne quelques infos sur sa version de memcache.
Et contrairement à lui, la méthodologie pour ajouter vos serveurs Memcached à mon plugin est la suivante:
$memcached_servers[] = array( ‘host’ => ’127.0.0.1′, ‘port’ => 11211, ‘persistant’ => true );
C’est un point que je n’aborde pas, mais Memcached peut être répandu sur des clusters de serveurs… c’est la méthode WordPress.com !
Dernier point
Je base cet article sur mon expérience de différents serveurs, 3 différents. Le raisonnement est vérifié sur ces 3 serveurs.
Si vous avez d’autres techniques… je suis preneur :)
13 février 2008 §
Pour cette deuxième journée, et dernière pour moi, j’ai eu l’occasion d’assister 2 sessions. Que 2 sessions sur 6 possibles ? Eh oui, que 2 sessions ! Pour plusieurs raisons…
- Je n’ai pas fait la plénière de ce mardi (véritable perte de temps pour les personnes connaissant un peu leur sujet)
- Le temps où je suivai le maximum de session est révolu. Si c’est pour avoir oublié de quoi parler la première session de la journée à 18 heures, je ne vois pas trop l’intérêt…
- Mes critères de choix de session sont assez draconiens. (les sessions level 100 et découverte sans moi… bye bye également les sessions PHP, VB et C#. Sans oublier les retours d’entreprise, les sessions pour décideur, et CRM/ERM, etc.)
Bref, les 2 élues sont :
- Windows Server 2008 : nouveautés de sécurité
- [Recherche] Singularity: un Operating System révolutionnaire
Rentrons dès maintenant dans le vif du sujet !
1. Windows Server 2008 : nouveautés de sécurité
Cette session consacrée a la sécurité dans Windows Server 2008, était animée par 2 excellents speakers Stanislas Quastana et Cyril Voisin. Ces 2 messieurs ont découpé la session en 4 points importants:
- La sécurité du système lors de la conception du système
- Le nouveau cycle de développement de MS, mise en place la première fois dans Windows Vista et dont Windows Server 2008 utilise et améliore. (Vista SP1 et Server 2008 partagent le même noyau)
- La sécurité système
- Nouvelles techniques de cryptage (composant enfichable)
- Plusieurs stratégies de sécurité sur un même domaine
- Windows Server Core 2008 (je vais en reparler)
- La sécurité du réseau
- La sécurité des données
La révélation de ce nouveau système est sans aucun doute, Core Server, qui donne la possibilité d’installer un système minimal (sans explorateur Windows, sans ie, sans bureau). Juste un Shell Windows !
Intérêt ?
- Consommation mémoire réduite
- Surface d’exposition moindre (moins de possibilités de failles)
- Geeks heureux…
Tout en sachant qu’il est tout à fait possible d’administrer le serveur à distance. Bientôt le retour de Windows Server 2008 dans le coeur des administrateurs Linux ?
Première réflexion de Seb une fois le chapitre sur Core Server, y’a un APT GET ? :D ! Comprendra qui pourra….
2. [Recherche] Singularity: un Operating System révolutionnaire
Cette session, un peu particulière, vue qu’elle traite d’un projet de Microsoft Research, et non un produit de Microsoft Corp. Elle a été présente par Bernard Ourghanlian, CTSO France de Microsoft. (Chief Technical and Security Officer) Du costaud autrement dit !
C’est quoi Singularity ?
Bonne question… Singularity est un système d’exploitation révolutionnaire ! Enfin pas vraiment, ce projet n’a pas pour but de réinventer la roue, son objectif n’est pas non plus d’améliorer les performances.
Son objectif est toute autre… Son objectif est de développer un système d’exploitation prenant compte de l’environnement matériel d’aujourd’hui.
Peut être que vous ne le savez pas, mais Windows XP, Mac OS X, Linux sont développés sur des concepts élaborés selon les ressources matérielles des années 75/80.
Des années lumières par rapport aux configurations de nos jours… (Pour l’anecdote j’ai commencé avec un Pentium 75 disposants de 32 Mo de RAM et d’un disque dur de 800 Mo ! Un téléphone de nos jours peut disposer de bien plus de puissance…)
Singularity est là pour changer la donne, et permettre d’exploiter à 100% le matériel de notre époque, tout en profitant des langages de développement moderne, tels que le C#.
Pour cela il porte de grandes modifications dans l’utilisation de la mémoire, la gestion des processus, etc.
Je ne vais pas m’attarder plus sur le sujet pour le moment. Je vous conseille de lire les ressources suivantes, tout en sachant que je vais peut-être m’amuser à tester le projet à l’état actuel, et probablement écrire (ou co écrire avec Sebastien) un article sur la chose…
Pour aller plus loin:
Quelques photos des slides de la presentation:

12 février 2008 §
Et me revoilà replongé dans l’univers impitoyable des technologies Microsoft ! En effet, comme tous les ans, j’ai l’occasion d’aller au salon Microsoft Techdays a Paris.
C’est l’occasion de re-découvrir les technos d’aujourd’hui, mais aussi, et surtout de découvrir celle de demain !
Au menu de cette première journée :
- La session plénière
- IIS7 pour les développeurs
- Introduction a F#
- LINQ : Session avancée
Première journée orientée développement comme vous pouvez le constater… (ou pas)
1. La session plénière du lundi
Tradition oblige, chaque journée des Techdays commence par la traditionnelle session plénière dans l’amphithéâtre de 3723 places.
Cette session a comme objectif de faire le tour d’ensemble des nouvelles technologies de Microsoft en 2008, et en très très gros, comment ça marche, qu’est-ce que c’est… c’est surtout pour donner un aperçu, tout en sachant que des sessions plus techniques (et plus intéressantes) suivent le reste des 3 jours.
Nous avons également eu droit à un petit message vidéo du retraité le plus riche de la planète (Bill Gates), nous racontons comme d’habitude des choses incroyablement passionnantes. (Son nouveau téléphone est plus puissant que son premier PC, scoop non ?)
Bref, Bill a dit qu’on était en 2008 (c’est toujours bon a savoir), et que Microsoft nous fournissait des logiciels de notre époque, productivité, travail collaboratif, tout ça…
2. IIS7 pour les développeurs
Première vraie session de mes TechDays 2008, une session sur le serveur HTTP de chez Microsoft, IIS7 ! Cette session était un peu particulière pour moi, vu qu’elle était présentée par mon camarade SUPINFO et ami Sebastien Warin (sa toute première fois :D). Pour cette conférence, il était accompagné de Sebastien Bovo de chez Microsoft France.
Autrement dit, je connaissais déjà un peu le sujet avant de venir à cette session. J’ai donc joué au photographe avec des appareils photos compacts… et mon dieu… qu’est-ce que j’aime mon reflex… a quand le reflex qui rentre dans une poche de chemise…
Le voilà en image (une des rares photos pas flous), Sebastien Warin, Speaker Techdays 2008.

Il est précisément en train de se demander pourquoi sa démo ne marche pas :) (ou ptete qu’il découvrait les slides :D)
Trêve de plaisanterie, les 2 Sébastien nous ont montrés en démo, les nouveautés apportées par IIS7, qui sont en gros:
- Modularité a 100%
- Configuration via XML a 100%
- Intégration a la plateforme .NET à 100%
- Gain « probable » de performances grâce à la modularité par exemple :)
Pour le résumé de la session, c’est par ici: IIS7 pour les développeurs
Pour allez plus loin (en attendant les Webcasts) :
3. Introduction a F#
Pour cette seconde session, j’ai assisté à une présentation, en anglais, du langage F#, animé par Don Syme, qui n’est qu’autre que son concepteur.
Pour résumé, le F# est:
un langage dérivé de Caml et conçu spécifiquement pour la plateforme .NET. C’est un langage fonctionnel (et incitant ce mode de programmation), entièrement orienté objet (même les entiers sont des objets et peuvent avoir des méthodes) et supportant la programmation impérative.
Source: Présentation de F#
C’est très intéressant, très complexe, très différent aux habitudes de développement habituelles. Je m’explique…
De nos jours, un scientifique met au point un algorithme très complexe. Super, mais comme vérifier et exploiter les résultats ?
Et bah il faut faire appel a des développeurs qui vont interprète l’algorithme pour le passer en langage « machine », comprendre en python, en C#, en Java, etc.
Le F# tend vers l’élimination de cet intermédiaire. En proposant des langages de développement plus fonctionnel, et donc plus accessibles à des scientifiques… à des experts financiers, etc.
Rien d’innovant, sauf que F# conserve toute l’intégration de la plateforme .NET… Les librairies .NET, la programmation-objet, et tous les outils de développements Microsoft. D’où l’intérêt…
C’est un sujet très intéressant, je vous conseille vivement de consulter le site de Laurent Le Brun’s qui propose des cours de F#.
Il y a plein de choses à découvrir…
4. LINQ : Session avancée
Pour finir cette journée, j’ai assisté à une session de Mitsu. Il nous a parlé de choses un peu complexes avec la technologie de requetage Linq.
C’est quoi Linq ? Linq c’est une nouveauté apportée par le C# v3. Cela permet d’exécuter des requêtes « SQL », dans différentes sources de données, jusque-là rien de nouveau ! Mais là où Microsoft fait fort, c’est qu’on peut faire du Linq depuis du XML, des bases SQL serveur, mais aussi depuis des collections d’objets !
C’est trop le genre de truc à implémenter en PHP :P
Je ne m’attarde pas plus sur Linq, vu que le produit été déjà présenté au TechDays 2007 ! (c’est tout sauf une découverte).
Le mot de la fin
2 photos faites depuis une terrasse sur le toit du palais des congrès (ou apparemment Seb est plus dans son élément…). Il fait beau, pas trop froid, y’a une belle vue… Que demander de plus pour décompresser du rush permanent de ce salon ;)

Technorati: techdays 2008
24 janvier 2008 §
Vous avez déjà essayé de copier un code indenté via l’éditeur VIM ? (par le biais de Putty par exemple)
C’est l’enfer non ?
Pour ceux qui n’ont jamais expérimenté, Vim a tout simplement l’habitude de rajouter des espaces aléatoires sur chaque ligne du texte copiés, bref c’est illisible…
J’ai donc effectué quelque recherche sur le Web et j’ai trouvé la modification à effectuer sur la configuration de VIM.
Pour cela, il vous faut éditer le fichier: (pour Debian Etch)
vim /etc/vim/vimrc
Pour ajouter à la fin du fichier le code suivant:
set paste
C’est déjà terminé ! Vous également décommenter la ligne:
syntax on
Pour profiter de la coloration syntaxique dans VIM ;)
Et les copier/coller redeviennent un jeu d’enfant ;)
2 décembre 2007 §
Si vous lisez ce message, c’est que vous consultez mon blog depuis le nouveau serveur !
Parlons un peu du nouveau serveur…
C’est un dédié OVH dont voici quelques caractéristiques techniques:
- Intel Core2Duo E6550
- 64 bits
- 2 Go DDR2
- 2x 250 Go SATA2 RAID 0/1
- 100 Mbps
Logiciellement parlant… nous avons fait une configuration exotique:
- Debian Etch 64 bits
- MySQL 5
- PHP5 via FastCGI
- Bind 9
- Serveur HTTP Nginx
- Ruby 1.8
- Mongrel
- Python 2.4
- Postfix
- Courier (POP, IMAP)
- Spamassassin
- Amavis
- Pure FTPD
Voilà pour le gros des logiciels.
Ci-dessous les guides utilisés pour arriver à nos fins:
Si vous avez des suggestions ou des questions… ;)