WordPress et le trop plein de fichiers sess_*
Hier, plusieurs lecteurs (merci à eux ) m'ont signalés que le message suivant s'affichait en haut de mon blog (sous WordPress 3.1.3):
Warning: session_start() [function.session-start]: open(/var/lib/php5/sess_7cad11067bb359c89ee47b9e692e47bf, O_RDWR) failed: No space left on device (28) in/www/wp-content/plugins/twitconnect/twitconnect.php on line 95
Ce message n'apparaissait que pour les lecteurs non authentifiés et uniquement sur certaines pages. Dans une premier temps j'ai donc décidé de désactivé le plugin incriminé dans le message d'erreur (TwitConnect qui permet de s'authentifier sur le blog avec son compte Twitter). J'ai ensuite regarder l'espace disque de mon serveur sans voir de problème. C'est en allant regarder les fichiers dans le répertoire /var/lib/php5 que j'ai commencer à comprendre pourquoi le plugin en question n'arrivait plus à générer de fichiers de sessions PHP (les fameux fichier sess_*). Il y avait en effet plus de 200.000 fichiers de ce type dans ce répertoire. On arrivait donc en limite maximale du nombre de fichiers par sous répertoire sous GNU/Linux en ext3.
Le problème vient sûrement d'un des plugins que j'utilise qui doit créer ces fichiers de sessions sans jamais les purger. Je suspecte (sans avoi de confirmation) le plugin TwitConnect et j'ai donc ouvert un incident sur le forum officiel du plugin.
Pour ne plus avoir de mauvaises surprises dans le futur, j'ai donc mis en place dans la crontab root journalière une commande qui va effacer les fichiers de sessions de plus de deux jours:
find /var/lib/php5/ -type f -atime +2 -name 'sess_*' -exec rm -f {} \;
Si vous utilisez également le plugin WordPress TwitConnect, je vous conseille donc de jeter un oeil sur ce répertoire et le nombre de fichiers sess_*.
Pour obtenir le nombre de fichier dans ce répertoire il suffit de saisir la commande suivante:
sudo ls -l /var/lib/php5/ | wc -l
En journée (après la purge de la nuit) je tourne autour des 45.000 fichiers (environ 25 nouveaux fichiers par minutes, mais cela dépend du nombre de visites non authentifiées sur votre blog...).