====== 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.
* vm.swappiness = 0 – Linux utilisera le HD en dernière limite pour éviter un manque de RAM.
* vm.swappiness = 60 – Valeur par défaut de Linux : à partir de 40% d’occupation de Ram, le noyau écrit sur le disque.
* vm.swappiness = 100 – tous les accès se font en écriture dans la SWAP.
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/"