====== 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/"