Retour : Proxmox VE
La RAM de l'hôte se partage entre :
| Consommateur | Remarque |
|---|---|
| Proxmox lui-même | 1 à 2 Go |
| Cache ZFS (ARC) | Si ZFS est utilisé, souvent la plus grosse part (voir plus bas) |
| VM | RAM attribuée à chacune, réservée dès le démarrage (sauf ballooning) |
| Conteneurs LXC | Consomment uniquement ce qu'ils utilisent, dans la limite fixée |
⚠️ Contrairement au CPU, la RAM supporte mal la surallocation : si l'hôte manque de mémoire, il utilise son swap (lenteurs) puis le noyau arrête des processus — souvent la VM la plus gourmande (OOM killer). Garder une marge de 10 à 20 % de RAM libre sur l'hôte.
VM → Hardware → Memory → Edit → cocher Advanced :
| Champ | Rôle |
|---|---|
| Memory (MiB) | Quantité maximale de RAM vue par la VM |
| Minimum memory (MiB) | Plancher en dessous duquel le ballooning ne descend pas |
| Ballooning Device | Active le pilote de ballooning |
| Shares | Priorité relative lors de la récupération de mémoire |
# 8 Go fixes, ballooning désactivé
qm set 100 --memory 8192 --balloon 0
# 8 Go maximum, peut redescendre à 4 Go si l'hôte manque de mémoire
qm set 100 --memory 8192 --balloon 4096
qm config 100 | grep -E 'memory|balloon'
Le pilote VirtIO balloon, installé dans l'invité, « gonfle » pour rendre de la mémoire à l'hôte quand celui-ci dépasse 80 % d'utilisation, puis la restitue à la VM quand elle se libère.
| ✅ À utiliser | ❌ À éviter |
|---|---|
| VM peu chargées, serveurs de services légers | Bases de données, VM avec des pics de mémoire |
| Hôte dont la RAM est un peu juste | VM avec passthrough PCI (GPU, carte réseau) : la RAM doit être fixe |
virtio-win.Pour voir ce que la VM utilise réellement, l'agent QEMU doit être actif (sinon Proxmox affiche la mémoire allouée, pas la mémoire utilisée) :
qm set 100 --agent enabled=1
KSM (Kernel Samepage Merging) fusionne les pages mémoire identiques entre VM (par exemple plusieurs VM Windows identiques). Il est géré par le service ksmtuned, qui ne l'active que lorsque l'hôte dépasse 80 % de RAM utilisée.
# Mémoire économisée par KSM (en pages de 4 Ko)
cat /sys/kernel/mm/ksm/pages_sharing
systemctl status ksmtuned
⚠️ KSM consomme du CPU et, en théorie, ouvre des attaques par canal auxiliaire entre VM. Sur un hôte qui héberge des VM de confiance différente, le désactiver :
systemctl disable --now ksmtuned.
ZFS utilise la RAM libre comme cache de lecture (ARC). Depuis Proxmox VE 8.1, l'installeur limite l'ARC à 10 % de la RAM (16 Go au maximum) sur une nouvelle installation ; sur une installation plus ancienne, il peut occuper jusqu'à la moitié de la RAM.
# Taille actuelle et maximale de l'ARC
arc_summary | grep -A3 "ARC size"
cat /sys/module/zfs/parameters/zfs_arc_max
Fixer la taille maximale (ici 8 Go = 8 × 1024³ octets) :
echo "options zfs zfs_arc_max=8589934592" > /etc/modprobe.d/zfs.conf
# Appliquer immédiatement
echo 8589934592 > /sys/module/zfs/parameters/zfs_arc_max
# Conserver le réglage au démarrage (racine sur ZFS)
update-initramfs -u -k all
| RAM de l'hôte | ARC maximal conseillé |
|---|---|
| 16 Go | 2 à 4 Go |
| 32 Go | 4 à 8 Go |
| 64 Go et plus | 8 à 16 Go |
💡 Un ARC trop petit ralentit les lectures disque ; un ARC trop grand prive les VM de mémoire. Ajuster selon le taux de succès du cache (
arc_summary, ligne Hit ratio).
Un conteneur n'a pas de RAM réservée : il consomme ce dont ses processus ont besoin, dans la limite fixée.
# 2 Go de RAM, 512 Mo de swap
pct set 200 --memory 2048 --swap 512
pct config 200 | grep -E 'memory|swap'
La limite se modifie à chaud, sans redémarrer le conteneur.
Le swap sert de dernier recours ; une utilisation régulière signale un manque de RAM.
free -h
swapon --show
# Ne swapper qu'en dernier recours
sysctl vm.swappiness=10
echo "vm.swappiness=10" > /etc/sysctl.d/99-swappiness.conf
💡 Une installation ZFS ne crée pas de swap par défaut : un swap sur un volume ZFS est déconseillé.
free -h
# VM et leur mémoire configurée
qm list
# Processus QEMU les plus gourmands
ps -eo pid,rss,cmd --sort=-rss | grep -m5 '[k]vm'