- Publié le 02 Décembre 2007 à 18:36
After 2 alphas and one beta release, eZ Publish 4 rc1 has been released last week. I'm trying to upgrade but I'm facing an encoding problem. In the meantime, I made a benchmark between eZ Publish 4rc1 with PHP 5.2.5 and eZ Publish 3.10.0 with PHP 4.4.7 on a Debian Etch system using the Dotdeb packages. I also tested the performances of APC, eAccelerator and XCache opcode cache modules in those configurations.
Protocol
I'm using the recommended configuration for Virtual Host setup of eZ Publish. I wrote this shell script to test performances of eZ Publish.
#! /bin/sh
REQUESTS=100
CONCURRENCY=2
TESTS=5
PAUSE_TESTS=90
URL='http://dev.pwet.fr/blog'
DATA_LOG_DIR=~/tests/results_php4_blog/
CONF_DIR=~/tests/conf
PAUSE_CONF=180
PHP_CONFD=/etc/php4/apache/conf.d/
[ ! -d $DATA_LOG_DIR ] && mkdir -p $DATA_LOG_DIR
for ini in $CONF_DIR/* ; do
INI_BASE=`basename $ini`
echo $INI_BASE
DATA_LOG="$DATA_LOG_DIR/$INI_BASE.dat"
[ -f $DATA_LOG ] && rm -f $DATA_LOG
touch $DATA_LOG
# active extension
ln -s $ini $PHP_CONFD/$INI_BASE
/etc/init.d/apache restart > /dev/null 2>&1
sleep 2
# initialize cache
wget $URL -O /dev/null > /dev/null 2>&1
sleep 2
# tests
for i in `seq 1 $TESTS` ; do
echo " Test $i"
ab -c $CONCURRENCY -n $REQUESTS $URL | grep 'Requests per' | tr -s ' ' | cut -d ' ' -f 4 >> $DATA_LOG
sleep $PAUSE_TESTS
done
sleep $PAUSE_CONF
rm -f $PHP_CONFD/$INI_BASE
/etc/init.d/apache restart
done
I've run this shell script with a PHP4 setup (eZ Publish 3.10) and then with a PHP5 setup (eZ Publish 4.0rc1) sharing the same database. The script uses 4 configurations of PHP (no opcode cache, apc, eaccelerator, xcache), for each it makes 5 series of 100 requests with a concurrency of 2 with ab (Apache Benchmark) and it logs the mean number of requests per second. There are pauses between tests. I've run those tests on two pages of this site on a dedicated test server, the first one is the /blog page with view cache et cache-block enabled and the second one is /man/linux but with no view cache and no cache-block at all in order to see how eZ Publish 4 and 3.10 performs on retrieving its cache or on building a page from scratch. The first one makes 6 SQL queries and uses 2 cache-block and its view cache. The second one, without content related caches, makes about 100 SQL queries an displays about 10 XML blocks and 3 dynamic lists.
Result with a cached page
Without an opcode cache on cached page, eZ Publish 4 is about 10% quicker than eZ Publish 3.10 but with an opcode cache system, the difference is about 50% ! It's interesting to note that with PHP4, eAccelerator seems to be the faster yet, about 10% more than APC or XCache but with PHP5 there's almost no difference (more or less 2%).
Result with a page without content related cache
In this test, without an opcode cache, eZ Publish 4 is 85% faster than eZ Publish 3.10. And with an opcode, eZ Publish 4 using PHP 5.2.5 is about 150% faster than eZ Publish 3.10 !
Conclusion
No doubt, eZ Publish 4 is really faster than eZ Publish 3.10 and even more with an opcode cache.
I think I'm going to test eZ Publish 4 and 3.10 with apache 1.3 and apache 2.2 and perhaps with different configuration of MySQL 5.0, stay tuned :)
- Publié le 13 Mai 2007 à 14:56
J'aime beaucoup écouter la radio parisienne OuiFM. Pour les provinciaux, il est possible de l'écouter directement sur le site via une animation flash qui affiche le titre en cours ou avec son lecteur préféré via le flux MP3 qui est probablement capable d'en faire de même, mais il n'est pas très pratique devoir remettre au premier plan le lecteur (et/ou de changer de bureau virtuel). Je trouve aussi pénible que le lecteur affiche systématiquement le titre comme le font certains, je préfère avoir le titre à la demande. J'ai donc écrit un petit script shell qui va récupèrer le titre sur le site de OuiFM comme le fait l'animation flash et l'affiche en OSD. Pour l'utiliser sous Ubuntu (et probablement Debian), il faut installer le paquet xosd-bin et php (4 ou 5) en mode ligne de commande avec la commande suivante :
$ sudo apt-get install xosd-bin php5-cli
Le paquet xosd-bin fournit le programme osd_cat qui permet de lire un fichier à la manière de cat en affichant le résultat en OSD selon différents paramètres (couleur, police, position, ...). J'ai associé l'exécution de ce script à la touche F9 dans Openbox, ainsi si un titre passe et je ne connais pas l'artiste, je peux connaître rapidement le titre en pressant cette touche.
#! /bin/sh
URL_DATA="http://www.ouirock.com/data1.php"
TMP_FILE="/tmp/ouifm_data"$$".txt"
DATA_OSD=""
OSD_FONT='-bitstream-dejavu sans-bold-r-*-*-17-*-*-*-*-*-*-*'
OSD_VER_POS="bottom"
OSD_HOR_POS="right"
OSD_COLOR="#95b9c8"
OSD_DELAY=30
OSD_LINE_FROM_BOTTOM=2
get_infos ()
{
DATA_SHELL=`wget "$1" -q -O - | sed 's/&/ /g'`
eval $DATA_SHELL
DATA_OSD=`echo '<?php echo utf8_decode(urldecode("'$artiste' - '$titre'"))."\n"; ?>' | php`
}
display_infos ()
{
get_infos $URL_DATA
echo "$DATA_OSD" > $TMP_FILE
osd_cat -l $OSD_LINE_FROM_BOTTOM -f "$OSD_FONT" -p "$OSD_VER_POS" -A "$OSD_HOR_POS" -c "$OSD_COLOR" -d "$OSD_DELAY" $TMP_FILE
}
touch $TMP_FILE
display_infos $URL_DATA
rm -f $TMP_FILELe seul point particulier concerne la fonction get_infos qui récupère les données sur le site de OuiFM puis crée les variables avec eval et les décode avec un tout petit morceau de PHP passé directement à l'interprèteur.
Billet rédigé en écoutant entre autres "Hey Gravity - Risen (She Said)", "Rinocerose - Cubicle", "Green Day - Basket Case", ... :-)
- Publié le 01 Mai 2007 à 14:39
J'ai remarqué que sur plusieurs sites que la table ezsession chargée de stocker les données de session dans eZ Publish n'est jamais nettoyée, les données de session expirée s'accumulent. Selon la fréquentation du site, on obtient à plus ou moins long terme une table avec des millions d'enregistrements ce qui provoque au choix des ralentissements, des vérifications (mysqlcheck ) interminables, des problèmes pour faire les backups (mysqldump de plusieurs gigas) voire carrément une corruption de la base de données. J'ai d'ailleurs rapporté ce bug il y a quelques temps en proposant un script de 8 lignes (dont 4 inutiles...:-) à lancer via le système de cronjobs d'eZ Publish . Je ne suis visiblement pas le seul à avoir rencontré ce problème. Dans un fil du forum sur le même sujet , Xavier Dutoit propose d'utiliser le script update/common/scripts/cleanup.php pour supprimer les sessions expirées. Markus Bader a créé l'extension Session Cleanup pour régler ce problème.
Mais quel est la vraie origine de ce problème ? Richard Bayet apporte la lumière sur ce problème en citant un commentaire de la documentation PHP officiel sur une spécificité de Debian . Pour résumer, eZ Publish intègre son propre gestionnaire de session pour stocker les données en base plutôt que dans des fichiers. Or, sous Debian et dérivés, le nettoyage (Garbage collector) des anciennes sessions est assurées par un script shell lancé régulièrement par cron plutôt que par la fonction gc définit avec session_set_save_handler pour plus de sécurité dans l'utilisation du gestionnaire par défaut qui travaille avec des fichiers. Évidemment ce script est incapable de supprimer les sessions en base... Le lancement d'un script spécifique de manière asynchrone est donc nécessaire pour Debian et dérivés. Tout s'explique donc.
- Publié le 10 Mars 2007 à 14:54
J'ai un warning pénible lors du lancement d'un script PHP4 en ligne de commande (CLI) sur ma Ubuntu Edgy Eft installée sur ma Dedibox. Rien de bien grave, mais à chaque lancement d'un script (au hasard un de ceux d'eZ Publish :-), j'ai le message suivant :
$ php4 update/common/scripts/cleanup.php -s plain_site_admin expired_session
PHP Warning: mime_magic: type regex BEGIN[[:space:]]*[{] application/x-awk invalid in Unknown on line 0
Un moyen de supprimer ce message systématique trouvé sur Launchpad et sur l'outil de rapport de bug de Debian est d'aller commenter la ligne 273 du fichier /usr/share/file/magic.mime. Simple, un peu crade mais au moins ça marche et puis je ne pense pas que cette modification ait beaucoup d'impact sur le reste du système...
- Publié le 15 Décembre 2006 à 23:56
En écrivant mon précédent billet sur le logiciel Apwal, j'ai vainement cherché un logiciel permettant de faire une capture d'écran "animée" que ce soit en vidéo, en flash ou en GIF animé. J'avais bien trouvé Xvidcap mais il n'est pas dans les dépôts Ubuntu et le paquet non-officiel pour Debian ne fonctionne pas correctement...
Je me suis donc rabbattu sur deux captures d'écran consécutives réalisées avec mon script de capture basé sur import (de la suite ImageMagick) montées en GIF animé avec The GIMP... Mais depuis, au détour d'un commentaire d'un journal trollogène sur LinuxFr, j'ai découvert que plusieurs logiciels font cela et qu'ils portent tous le nom d'une ville turque :
J'ai retenu byzanz car il produit des GIF animés ce qui est quand même le plus pratique pour publier sur le web et en plus il est disponible dans les dépôts Universe d'Ubuntu ce qui simplifie grandement son installation avec la ligne de commande suivante (ou en cherchant dans synaptic ou équivalent) :
> tigrou@Lorien[192.168.0.243]:~$ sudo apt-get install byzanz
Une fois installé, ce logiciel se manipule soit via une applet dans un panneau GNOME soit via la ligne de commande en lui passant quelques paramètres détaillés dans sa courte page du manuel, comme je n'utilise pas GNOME, la ligne de commande ressemble à la suivante :
> tigrou@Lorien[192.168.0.243]:~$ byzanz-record -l -d 15 -x 249 -y 196 -w 460 -h 300 -c --delay=2 edition_dans_ez_publish.gif
Cette ligne va enregistrer deux secondes après son lancement un GIF animé nommé edition_dans_ez_publish.gif tournant en boucle de 460x300 pixels dont le point d'origine est 249x196 d'une durée de 15 secondes en incluant le curseur X11, ce qui donne l'animation suivante :
Comme c'est du GIF ça ne peut contenir que 256 couleurs mais c'est très léger (64Ko pour 15 secondes dans cet exemple) et donc tout à fait publiable sur le web ou envoyable par mail et peut permettre de facilement montrer une fonctionnalité voire de rapporter un bug difficile à expliquer.