Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Limitation de la mémoire ZFS (ARC) sur les serveurs

De AJLSM
Aller à la navigation Aller à la recherche

Limitation de la mémoire ZFS (ARC) sur les serveurs

[modifier | modifier le wikicode]

Plusieurs serveurs (beotos3, saturne3, eole3) présentent une consommation mémoire élevée liée à ZFS.

Cette consommation ne provient pas des processus utilisateurs mais du cache ZFS (ARC) et du slab kernel (notamment dnode, znode, dentry, etc.).

Symptômes observés :

  • RAM fortement utilisée (50+ Go)
  • Swap utilisé malgré de la mémoire "disponible"
  • Slab très élevé (> 40 Go), dont SUnreclaim important
  • Processus utilisateurs peu consommateurs (< 1 Go)

Commandes utiles :

free -h
cat /proc/spl/kstat/zfs/arcstats | grep '^size'
cat /proc/meminfo | egrep 'Slab|SReclaimable|SUnreclaim|MemAvailable'
slabtop -o | head -20

Indicateurs typiques :

  • ARC très élevé (plusieurs dizaines de Go)
  • Slab très élevé (> 50 Go)
  • SUnreclaim dominant (mémoire non libérable)

Correction appliquée

[modifier | modifier le wikicode]

Limitation de la taille maximale de l'ARC ZFS (eole3 et beotos3 -> 24Go, saturne3 -> 64Go) :

echo 25769803776 > /sys/module/zfs/parameters/zfs_arc_max

Configuration persistante :

echo "options zfs zfs_arc_max=25769803776" > /etc/modprobe.d/zfs.conf

(= 24 Gio)

Réduction de la propension au swap :

sysctl vm.swappiness=1
echo "vm.swappiness=1" > /etc/sysctl.d/99-swappiness.conf

Nettoyage du swap :

swapoff -a && swapon -a

Après modification de zfs_arc_max :

  • L'ARC est bien limité immédiatement
  • MAIS la mémoire déjà consommée (Slab / SUnreclaim) n'est pas libérée automatiquement

Un redémarrage du serveur est nécessaire pour revenir à un état sain :

reboot

Résultat attendu après redémarrage

[modifier | modifier le wikicode]
  • ARC limité (≈ 24 Go)
  • Slab fortement réduit
  • SUnreclaim faible
  • MemAvailable élevé
  • Swap non utilisé

Recommandations

[modifier | modifier le wikicode]
  • Adapter zfs_arc_max selon la RAM du serveur
  • Surveiller régulièrement :
    • ARC (arcstats)
    • Slab / SUnreclaim
  • Éviter les scans massifs simultanés (rsync, find) sur de très gros volumes de fichiers

Serveurs concernés

[modifier | modifier le wikicode]
  • beotos3
  • saturne3
  • eole3

La limitation de l'ARC ZFS est indispensable pour éviter :

  • une saturation mémoire
  • du swap inutile
  • des alertes de supervision erronées

Cette configuration doit être systématiquement appliquée sur les serveurs utilisant ZFS.