Outils pour utilisateurs

Outils du site


linux:memory (lu 98357 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
linux:memory [17-09-2014 13:46] – [Comportement de la swap] edmc73linux:memory [09-04-2026 15:31] (Version actuelle) edmc73
Ligne 3: Ligne 3:
  
 ===== Comportement de la swap ===== ===== Comportement de la swap =====
 +
 +==== swappiness ====
  
 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. 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.
Ligne 9: Ligne 11:
  
 Réduire cette valeur peut améliorer considérablement les performances du système. 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  Dans mon cas j'ai décidé de mettre swappiness à , la commande suivante applique cette valeur instantanément 
   sysctl -w vm.swappiness=5   sysctl -w vm.swappiness=5
-Pour quelle soit prise en compte lors du reboot de la machine, il faut rajouter la ligne suivante dans **/etc/sysctl.conf**+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   vm.swappiness=5
  
Ligne 21: Ligne 32:
   watch free   watch free
 Vous verrez se vider la swap et se remplir la ram jusqu'a plus soif LOL Vous verrez se vider la swap et se remplir la ram jusqu'a plus soif LOL
 +
 +==== vfs_cache_pressure ====
 +
 +Le paramètre vm.vfs_cache_pressure contrôle la priorité donnée à la mise en cache des fichiers par rapport à la mémoire des processus. Une valeur élevée peut pousser le système à swapper plus tôt. Par défaut, il est à 100.
 +
 +Pour réduire la pression sur le cache, testez temporairement :
 +  sysctl vm.vfs_cache_pressure=50
 +
 +Vérifiez :
 +  cat /proc/sys/vm/vfs_cache_pressure
 +
 +Rendez permanent en ajoutant dans /etc/sysctl.conf :
 +  vm.vfs_cache_pressure=50
 +
 +Appliquez :
 +  sysctl -p
 +
 +Note : Une valeur de 50 réduit la priorité du cache, favorisant la mémoire des processus. Soyez prudent, car une valeur trop basse peut affecter les performances des systèmes de fichiers.
  
 ===== Gérer la swap ===== ===== Gérer la swap =====
Ligne 27: Ligne 56:
   swapon -s   swapon -s
  
-Rajouter de la swap grâce à un fichier de swap. Nous allons créer un fichier de 2Go +==== Créer une swap dans un fichier ==== 
-  dd if=/dev/zero of=/file.swap bs=1G count=+ 
-Nous formatons ce fichier avec le système swap +Allez dans un répertoire par exemple 
-  mkswap -c /file.swap +  cd /var/cache/swap 
 + 
 +Rajouter de la swap grâce à un fichier de swap. Nous allons créer un fichier de 200Go 
 +  dd if=/dev/zero of=file.swap bs=1G count=200
 Il est nécessaire de mettre les droits adéquates Il est nécessaire de mettre les droits adéquates
-  chmod -v 600 /file.swap +  chmod -v 600 file.swap 
-On ajoute ce fichier à la swap de façon instantanée +Nous formatons ce fichier avec le système swap 
-  swapon /file.swap+  mkswap -c file.swap 
  
-Pour supprimer ce fichier de la swap +<code> 
-  swapoff /file.swap+mkswap: avertissement : la vérification des blocs défectueux du fichier d’espace d’échange n’est pas prise en charge : file.swap 
 +Configure l'espace d'échange (swap) en version 1, taille = 200 GiB (214748360704 octets) 
 +pas d'étiquette, UUID=0261ab32-d95c-4040-9c7a-5a9ac4920b7a 
 +</code> 
 +Si vous voulez retrouver l'UUID, utilisez la commande suivante 
 +  swaplabel file.swap 
 + 
 +Pour avoir le chemin complet du fichier 
 +  realpath file.swap 
 + 
 + 
 +Ajouter dans /etc/fstab 
 +  /var/cache/swap/file.swap none swap sw 0 0 
 + 
 +Rechargez tout 
 +  swapoff -av && swapon -av 
 + 
 +(A noter que mettre le UUID dans le fstab ne fonctionne pas car ce n'est pas une partition) 
 + 
 +=== Cas spécial sur ZFS === 
 +Utiliser ce système de fichier swap sur ZFS ne fonctionne pas. Il faut créer un volume. 
 + 
 +Créez le ZVol (exemple pour 16 Go sur votre pool rpool : adapter le nom rpool via la commande zpool list ) : 
 +<code> 
 +zfs create -V 16G -b $(getconf PAGESIZE) \ 
 +-o compression=off \ 
 +-o logbias=throughput \ 
 +-o sync=always \ 
 +-o primarycache=metadata \ 
 +-o secondarycache=none rpool/swap 
 +</code> 
 +Préparez et activez le swap : 
 +<code> 
 +mkswap -f /dev/zvol/rpool/swap 
 +swapon /dev/zvol/rpool/swap 
 +</code> 
 +Rendez-le permanent en ajoutant ceci à /etc/fstab : 
 +<code> 
 +/dev/zvol/rpool/swap none swap defaults 0 0 
 +</code> 
 + 
 +Voir les volumes zfs 
 +  zfs list 
 +==== 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
  
  
Ligne 45: Ligne 141:
 Commande pour vider le cache de la mémoire Commande pour vider le cache de la mémoire
   echo 3 > /proc/sys/vm/drop_caches   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
 +
 +<code>
 +[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
 +</code>
 +
 +Maintenant, on peut le forcer à se mettre en cache
 +<code>
 +[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
 +</code>
 +
 +On vérifie
 +<code>
 +[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
 +</code>
 +
 +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/"
 +
 +===== Compresser la RAM =====
 +
 +On peut compresser la RAM de façon dynamique grâce à zram
 +
 +-> https://www.linuxtricks.fr/wiki/zram-compresser-la-ram-au-lieu-de-swapper-sur-linux
 +
linux/memory.1410961617.txt.gz · Dernière modification : de edmc73