Outils pour utilisateurs

Outils du site


linux:memory (lu 98328 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] edmc73linux:memory [09-04-2026 15:31] (Version actuelle) edmc73
Ligne 4: Ligne 4:
 ===== Comportement de la swap ===== ===== Comportement de la swap =====
  
-FIXME : Je pose des commandes en vrac,je détaillerai plus tard+==== 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 11: 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 22: Ligne 31:
 Vous pourrez suivre l'évolution dans un autre terminal soit avec la commande **htop** ou avec la commande suivante Vous pourrez suivre l'évolution dans un autre terminal soit avec la commande **htop** ou avec la commande suivante
   watch free   watch free
-Vous verrez se vider la swap et se remplir la ram jusqu'a plus soif :)+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 29: 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 47: 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.1410961596.txt.gz · Dernière modification : de edmc73