Linux : créer un fichier d'échange (swap) pour optimiser un VPS

De temps en temps, on me demande de configurer des serveurs dédiés ou des VPS. Dernièrement, j'ai travaillé sur un VPS qui n'avait pas de fichier swap et qui finissait par consommer toute la RAM disponible.

Linux : créer un fichier d'échange (swap) pour optimiser un VPS photo

Ce tutoriel vous permet de mettre en place un fichier swap sous Ubuntu 16.04 Server.

Le fichier swap

Le moyen le plus simple d'avoir un serveur réactif et de le prémunir contre les erreurs out-of-memory des services est d'allouer un fichier swap.

Le swap est une zone du disque dur spécialement créée pour que le système d'exploitation y garde des données temporaires qu'il ne peut plus stocker dans la RAM.

Cet espace permet donc aux services du serveur de continuer de tourner même lorsque la RAM est épuisée et ne sera utilisé que dans ce cas de figure.

Les informations seront cependant écrites sur le disque beaucoup moins rapidement que via la RAM.

Vérification du swap sur le système

Commençons par vérifier si un fichier de swap est déjà en place :

swapon --show

Aucun résultat : le système n'a pas d'espace réservé pour le fichier d'échange.

On vérifie une nouvelle fois s'il existe un fichier de swap actif:

free -h

Résultat:

                        total        used        free      shared  buff/cache   available
Mem:           3.9G        517M        2.5G         76M        895M        3.0G
Swap:            0B          0B          0B

Pas de swap actif sur notre système, nous allons donc pouvoir en ajouter une.

Vérification de l'espace disponible

Il est très commun de créer une nouvelle partition qui contient le fichier d'échange mais comme il n'est pas toujours possible de changer le schéma de partition, nous allons créer un fichier d'échange qui résidera sur notre partition existante.

Vérifions l'espace disponible :

df -h

Résultat:

Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           396M  3.2M  393M   1% /run
/dev/vda1        59G   13G   45G  22% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
tmpfs           396M     0  396M   0% /run/user/0

Le disque dur se trouve sous /dev dans notre cas.

En ce qui concerne la taille de la partition swap : elle ne doit pas dépasser 4 Go (parce qu'au-delà, c'est inutile) et doit correspondre à peu près à la taille de votre RAM (ou le double de votre RAM suivant votre serveur).

Création du fichier d'échange

Nous allons donc créer un fichier d'échange nommé swapfile, d'une taille de 4 Go, à la racine du système (/).

sudo fallocate -l 4G /swapfile

Par souci de sécurité, ce fichier sera uniquement lisible par l'utilisateur root :

sudo chmod 600 /swapfile

Vérifions les permissions et l'espace réservé :

ls -lh /swapfile

Résultat:

-rw------- 1 root root 4.0G Jan 17 16:31 /swapfile

Lire la suite! »

La Dispute - King Park

La Dispute est un groupe de post-hardcore américain, originaire de Grand Rapids, dans le Michigan. Formé en 2004, les membres principaux sont Jordan Dreyer (chant), Brad Vander Lugt (batterie), Chad Morgan-Sterenberg (guitare) et Adam Vass (basse).

Dreyer n'était pas chanteur et n'avait jamais composé de musique lors de la création de La Dispute mais écrivait déjà à l'époque des poésies et de courtes fictions, ce qui se perçoit dans pas mal de morceaux.

L’origine du nom du groupe La Dispute est issue de la pièce éponyme écrite par le dramaturge français Pierre de Marivaux. En effet, le chanteur du groupe, Jordan Dreyer lut la pièce au lycée et fit de nombreux parallèles entre le travail de Marivaux et la musique qu'il composait à l'époque.

En voici un petit exemple avec King Park:

Lire la suite! »

BASH : supprimer les fichiers de session PHP obsolètes

Je vous ai déjà parlé du problème des fichiers de session PHP. Or, je me suis aperçu que le problème n'est toujours pas réglé sous Debian : les fichiers de session de PHP ne sont jamais effacés et cela finit par saturer la partition /root.

BASH : supprimer les fichiers de session PHP obsolètes photo

Sur le serveur, ces fichiers prenaient 590 Mo, ce qui est énorme vu que ces fichiers ont la taille d'un fichier de cookies. Il y en a donc des milliers, dans un seul répertoire, ce qui consomme un maximum d'inodes.

A oneliner to rule 'em all

Voici le nombre d'inodes avant de lancer la commande de nettoyage :

df -i

Résultat:

Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/root        640K  212K  429K   34% /
devtmpfs         487K  1.5K  486K    1% /dev
tmpfs            487K   864  487K    1% /run
tmpfs            487K     4  487K    1% /run/lock
tmpfs            487K     2  487K    1% /run/shm
/dev/sda2         44M   75K   43M    1% /home

Voici donc comment régler le problème en une seule ligne, dans le terminal. On supprime tous les fichiers de sessions qui existent depuis plus de 24 minutes (TTL par défaut de PHP) :

find /var/lib/php/sessions -type f -cmin +24 -name 'sess_*' | xargs rm

Notez la rapidité d'exécution de la commande, grâce à xargs.

On relance le calcul d'inodes:

df -i

Résultat:

Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/root        640K   88K  553K   14% /
devtmpfs         487K  1.5K  486K    1% /dev
tmpfs            487K   864  487K    1% /run
tmpfs            487K     4  487K    1% /run/lock
tmpfs            487K     2  487K    1% /run/shm
/dev/sda2         44M   75K   43M    1% /home

Boom : 20% d'inodes en plus. Pas mal, surtout que ces sessions sont expirées depuis belle lurette et auraient dues être supprimées depuis bien longtemps.

Crontab pour supprimer les fichiers de session PHP

Le mieux reste encore de créer une tâche cron qui va vérifier chaque jour que le répertoire de sessions ne se remplit pas inutilement. Nous allons toutefois faire les choses avec un peu plus de finesse : nous allons chercher le chemin de stockage des sessions ainsi que la durée de vie des sessions et supprimer chaque jour les fichiers expirés.

On crée notre script bash:

nano /etc/scripts/cleanup-php-sessions.sh
#!/bin/bash
# Script Name : cleanup-php-sessions.sh
# Author : Matt Biscay
# Author URL :  https://www.skyminds.net/?p=28992
# Hire me : https://www.skyminds.net/hire-me/

# Export bin paths
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Get PHP Session Details
PHPSESSIONPATH=$(php -i 2>/dev/null | grep -w session.save_path | awk '{print $3}' | head -1);
PHPSESSIONLIFETIME=$(php -i 2>/dev/null | grep -w session.gc_maxlifetime | awk '{print $3}' | head -1);
PHPSESSIONLIFETIMEMINUTE=$( expr $PHPSESSIONLIFETIME / 60 );

# If PHPSESSIONPATH exists
if [ -d $PHPSESSIONPATH ];
then
    # Find and delete expired sessions files :

	# Sluggish way
	#find $PHPSESSIONPATH -type f -cmin +$PHPSESSIONLIFETIMEMINUTE -name "sess_*" -exec rm -f {} \;

	# Quick way
	find $PHPSESSIONPATH -type f -cmin +$PHPSESSIONLIFETIMEMINUTE -name 'sess_*' | xargs rm
fi

Il ne reste plus qu'à l'activer:

crontab -e

et on lance le script tous les jours à minuit :

@daily sh /etc/scripts/cleanup-php_sessions.sh #Cleanup PHP sessions daily

Et voilà, mine de rien, vous venez de vous enlever une future épine du pied. C'est typiquement le genre de fichiers que l'on ne surveille pas et qui peuvent un jour poser problème, notamment au niveau des inodes.

Pin It on Pinterest

Spelling error report

The following text will be sent to our editors: