Table des matières

Mémoire, RAM, SWAP

Comportement de la swap

La variable swappiness permet de faire varier l’utilisation de la mémoire vive par rapport à la swap. Par défaut, cette variable est fixée à 60 sur une échelle qui va de 0 à 100.

Plus cette valeur est élevée plus le système va avoir tendance à swapper au détriment de l’utilisation de la mémoire vive.

Réduire cette valeur peut améliorer considérablement les performances du système.

Pour vérifier la valeur actuelle

cat /proc/sys/vm/swappiness

Dans mon cas j’ai décidé de mettre swappiness à , la commande suivante applique cette valeur instantanément

sysctl -w vm.swappiness=5

Pour quelle soit prise en compte lors du reboot de la machine, il faut créer un fichier dans /etc/sysctl.d

vi /etc/sysctl.d/swappiness.conf

et mettez dans ce fichier

vm.swappiness=5

Afin de décharger le contenu de la swap dans votre ram, il faut désactiver la swap puis la réactiver avec la commande suivante

swapoff -av && swapon -av

Vous pourrez suivre l’évolution dans un autre terminal soit avec la commande htop ou avec la commande suivante

watch free

Vous verrez se vider la swap et se remplir la ram jusqu’a plus soif LOL

Gérer la swap

Pour afficher la swap en cours

swapon -s

Créer une swap dans un fichier

Rajouter de la swap grâce à un fichier de swap. Nous allons créer un fichier de 2Go

dd if=/dev/zero of=/file.swap bs=1G count=2

Nous formatons ce fichier avec le système swap

mkswap -c /file.swap 

Il est nécessaire de mettre les droits adéquates

chmod -v 600 /file.swap

On ajoute ce fichier à la swap de façon instantanée

swapon /file.swap

Pour supprimer ce fichier de la swap

swapoff /file.swap

Créer une swap en RAM

Ca peut sembler bizarre mais on peut utiliser la RAM pour y stocker un fichier de swap.

Tout d’abord, vérifier le device loop disponible

#losetup -f
/dev/loop0

Créer un fichier dans la RAM

cd /dev/shm
dd if=/dev/zero of=/dev/shm/file.swap bs=1024 count=4096000

On associe le fichier au device loop

losetup /dev/loop0 /dev/shm/file.swap

On formate notre device

mkswap /dev/loop0

On monte le device en swap

swapon /dev/loop0

Pour vérifier

swapon -s

Cache

Commande pour vider le cache de la mémoire

echo 3 > /proc/sys/vm/drop_caches

Qui utilise le swap

Ligne de commande à adapter si besoin

for file in /proc/*/status ; do awk '/^(VmSwap|Pid|Name)/{printf "%30s%s",$2,$3}END{ print ""}' $file; done | sort -k3 -h

Avec des tabulations comme séparateur

for file in /proc/*/status ; do awk '/^(VmSwap|Pid|Name)/{printf $2 "" $3 "\t"}END{ print ""}' $file; done | sort -t$'\t' -k3 -h

Une variante qui permet de récupérer l’Uid et de le résoudre pour avoir le nom de l’utilisateur

for file in /proc/*/status ; do awk '/^(VmSwap|Uid|Pid|Name)/{if($1=="Uid:"){ system("echo -n $(id -nu " $2")"); printf "\t";} else printf $2 "" $3 "\t"}END{ print ""}' $file; done | sort -t$'\t' -k4 -h

Quels fichiers en RAM Cache

Utilisez ce script ⇒ https://github.com/hoytech/vmtouch

vmtouch permet d’afficher si un fichier ou plusieurs sont stocké en ram. Il permet aussi de forcer un fichier à se mettre en ram plus tout un tas d’options ⇒ https://github.com/hoytech/vmtouch/blob/master/vmtouch.pod

Exemple, ici on voit que le fichier n’est pas en cache

[root@xt ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[     ] 0/5

           Files: 1
     Directories: 0
  Resident Pages: 0/5  0/20K  0%
         Elapsed: 0.000215 seconds

Maintenant, on peut le forcer à se mettre en cache

[root@xt ~]# vmtouch -vt /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
   Touched Pages: 5 (20K)
         Elapsed: 0.005313 seconds

On vérifie

[root@xt ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
  Resident Pages: 5/5  20K/20K  100%
         Elapsed: 0.000241 seconds

Commande pour afficher la liste des fichiers d’un répertoire qui sont en RAM

vmtouch -v * | grep -B 1 "^.\[.*[^ 0]/"

Ou au contraire qui ne sont pas en RAM

vmtouch -v * | grep -B 1 "^.\[.* 0/"