Debian 8 Jessie : booster les sessions PHP en utilisant la mémoire RAM avec tmpfs
dim, 05/08/2016 - 11:43 — geek17Si vous avez suivi les articles précédents, votre PHP utilise le répertoire /var/lib/php/sessions pour stocker les variables de session de PHP : $_SESSION
Vous pouvez vérifier dans votre phpinfo() la valeur de la variable session.save_path
session.save_path /var/lib/php/sessions
Pour éviter de faire des accès aux disques durs à chaque utilisation des variables de sessions, j'ai décidé d'utiliser un RAM Disk (tmpfs).
Pour faire simple, j'alloue une partie de la mémoire RAM de mon serveur à une partition virtuelle qui sera utilisée comme un disque dur "normal".
Attention par contre, lors d'un redémarrage du serveur, le contenu de ce RAM Disk est définitivement perdu.
Mais bon, pour stocker les variables de sessions, ce n'est pas réellement un problème.
Afficher les volumes
Avant d'aller plus loin, exécuter la commande df pour afficher les volumes de votre système et l'espace disponible.
df
Le résultat sur mon serveur.
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10287416 2174260 7673032 23% /
udev 10240 0 10240 0% /dev
tmpfs 401908 45552 356356 12% /run
tmpfs 1004768 0 1004768 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1004768 0 1004768 0% /sys/fs/cgroup
Vous remarquerez qu'il existe déjà plusieurs volumes tmpfs qui ont été créés par votre système.
Création du volume tmpfs pour les sessions PHP
C'est finalement assez simple... la commande suivante va permettre de créer un volume de 128 Mo (en RAM) qui accueillera désormais tous les fichiers stockés à /var/lib/php/sessions
sudo mount -t tmpfs -o size=128M tmpfs /var/lib/php/sessions
J'ai alloué 128 Mo à mon volume /var/lib/php/sessions mais tmpfs n'utilise que l'espace nécessaire.
Donc s'il n'y a que 2 Mo sur mon volume, il ne consommera que 2 Mo de mémoire et pas 128 Mo
La commande mount ci-dessus sera perdue après un redémarrage de votre serveur.
Rendez-vous au chapitre ci-dessous si vous souhaitez monter automatiquement votre volume tmpfs à chaque démarrage de votre serveur.
Monter automatiquement le volume tmpfs au démarrage du système
Pour que le volume tmpfs soit monté dès le démarrage du système, il faut le définir dans le fichier fstab
sudo nano /etc/fstab
Voici le contenu sur mon serveur VPS avant modification
# /etc/fstab: static file system information.
proc /proc proc nodev,noexec,nosuid 0 0
/dev/vda1 / ext3 errors=remount-ro 0 1
Et j'ajoute la ligne suivante à la fin du fichier
tmpfs /var/lib/php/sessions tmpfs defaults,size=128M 0 0
Pour lire et appliquer le fichier fstab, 2 possibilités :
- redémarrer le serveur avec sudo reboot
- remonter les partitions avec sudo mount -a
Si vous exécuter à nouveau la commande df, vous constaterez que /var/lib/php/sessions est bien en mémoire à présent
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10287416 2174268 7673024 23% /
udev 10240 0 10240 0% /dev
tmpfs 401908 45552 356356 12% /run
tmpfs 1004768 0 1004768 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1004768 0 1004768 0% /sys/fs/cgroup
tmpfs 131072 0 131072 0% /var/lib/php/sessions
Sources : https://doc.ubuntu-fr.org/tmpfs