
Hoy vamos a hablar a raiz de un problema con la memoria RAM de mi Homelab.
Basicamente lo que pasaba es que cada vez que conectaba al dashbloard de Proxmox, desde Summary veia que la RAM estaba ocupando casi por completo los 16gb de RAM del servidor.
Echando cálculos de la memoria RAM que tenían asignados todos los contenedores LXC y maquinas virtuales quemu vi que ni de broma llegaban a consumir los 16GB de RAM que tenía mi sistema.
¿Qué narices pasaba? Nuestro querido ZFS ARC.
En este guía doy los pasos necesarios y rápidos para establecer este límite de memoria RAM.
Si no te apetece leer también está la opción de ver el ejemplo practico en el siguiente video de 2 minutos
¿Cómo sé cuánto poner? La recomendación oficial de Proxmox es:
2 GB base + 1 GB por cada TB de almacenamiento disponible en el pool
En mi caso, tengo 10TB de almacenamiento, así que: 2 + 10 = 12 GB. En este caso una barbaridad de RAM teniendo en cuenta que la memoria RAM de la que dispongo es de 16GB
Aquí tenemos que ver la mejor opción para el servidor y poder disponer de RAM tanto para Proxmox PVE, máquinas virtuales (quemu) y los contenedores lxc.
Modificar ZFS ARM en nuestro Proxmox
Bien, en este caso querremos establecer un minimo y un maximo de uso de memoria RAM en nuestro proxmox.
Para este caso como estamos con un HP Microserver Gen8 el cual tiene de máximo 16GB de RAM, por lo que le estableceremos un minimo de 2GB y un maximo de 6GB. Que le establezamos el maximo de 6GB no quiere decir que vaya a estar siempre gastando 6GB.
Para ello tendremos que acceder al siguiente fichero
nano /etc/modprobe.d/zfs.confY una vez dentro estableceremos los siguiente valores en bytes
options zfs zfs_arc_min=2147483648
options zfs zfs_arc_max=6442450944Una vez establecido, tendremos que actualizar initramfs para que nos aplique los nuevos valores mínimos y máximos de RAM.
update-initramfs -u -k allDependiende de nuestra instalación de Proxmox ya haya sido EUFI o no es posibles que nos salgan unos mensajes como los siguientes. Estos errores no hay que hacerles caso ya que es normal.

Despues reiniciamos nuestra máquina física de Proxmox. Aunque en Linux supuesamente no es necesario reiniciar, hay para determinados procesos como puede ser este que necesita el reinicio de la máquina física.
Verificar los cambios de ZFS arc
cat /sys/module/zfs/parameters/zfs_arc_min
cat /sys/module/zfs/parameters/zfs_arc_maxNos tienen que aparecer los valores asignados en el punto anterior.

Otra forma de comprobarlo es con un comando más detallado. Nos enseñará el status actual de ARC y aparte el mínimo y máximo que establecimos.
arc_summary | head -20
Mostrar consumo actual de RAM en ARC
Este comando que voy a enseñar me parece buenísimo ya que vamos a ver en tiempo real el consumo que está haciendo ARC.
Con este comando durante los próximos 10 segundos nos mostrará
arcstat 1 10Una vez lanzado nos mostrará algo como esto:
Vemos que tenemos el size de 6GB, que es lo que está utilizando en este momento; nuestro máximo.

Igualmente para entender lo que significa cada columna de este comando dejo por aquí esta tabla explicativa
| Columna | Significado | Explicación |
|---|---|---|
| time | Hora del muestreo | Timestamp exacto de cuándo se capturó la métrica (formato HH:MM:SS) |
| read | Lecturas totales del ARC | Operaciones de lectura que acceden al caché ARC (en MB/s) |
| ddread | Lecturas de datos deduplicados | Lecturas de bloques que han sido deduplicados (en MB/s). Alto valor = deduplicación activa |
| ddh% | Hit ratio de datos deduplicados | Porcentaje de aciertos en el caché ARC para datos deduplicados (0-100%) |
| dmread | Lecturas de metadata | Lecturas de metadata del pool (índices, inodos, etc.) en MB/s |
| dmh% | Hit ratio de metadata | Porcentaje de aciertos en el caché ARC para metadata (0-100%) |
| pread | Lecturas prefetched | Lecturas anticipadas/predichas por el prefetcher de ZFS (en MB/s) |
| ph% | Hit ratio de prefetch | Porcentaje de aciertos del prefetcher en el caché (0-100%) |
| size | Tamaño actual del ARC | Memoria actual utilizada por el caché ARC (en GB, KB, MB, etc.) |
| c | Target size del ARC | Tamaño objetivo/configurado del caché (tu zfs_arc_max) |
| avail | Memoria disponible del sistema | RAM disponible libre en el sistema (no usada por nada) |
Con esta guía rápida ya tendremos limitada la memoria RAM para ARC y no nos llevaremos disgustos con los consumos. Y como siempre, ya es costumbre decir: Si este post te ha ayudado, compártelo con otros administradores que puedan beneficiarse. Y sígueme para más experiencias reales desde las trincheras del homelab.