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
Limitation de la mémoire ZFS (ARC) sur les serveurs
Contexte
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)
Diagnostic
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
Limitation de la taille maximale de l'ARC ZFS :
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
Important
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
- ARC limité (≈ 24 Go)
- Slab fortement réduit
- SUnreclaim faible
- MemAvailable élevé
- Swap non utilisé
Recommandations
- 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
- beotos3
- saturne3
- eole3
Conclusion
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.