El código ZFS informa varias estadísticas a través de procfs. Para determinar el tamaño del ARC, mire /proc/spl/kstat/zfs/arcstats
(suponiendo que procfs esté montado en / proc, como es costumbre), específicamente los valores para c
, c_max
y size
. (Consulte también esta publicación en el foro de la Comunidad de Oracle . Copia alternativa de Internet Archive en caso de que el sitio de Oracle no esté disponible).
c
es el tamaño objetivo del ARC en bytes
c_max
es el tamaño máximo del ARC en bytes
size
es el tamaño actual del ARC en bytes
El tamaño máximo del ARC se puede ajustar pasando un zfs_arc_max=N
parámetro al zfs
módulo (a través de modprobe), donde N
está el tamaño máximo del ARC en bytes, o sobre la marcha escribiendo el nuevo tamaño máximo en bytes /sys/module/zfs/parameters/zfs_arc_max
.
Debido a cómo se implementa ZFS en Linux , la memoria ARC se comporta como la memoria caché (por ejemplo, se desaloja si el sistema está bajo presión de memoria), pero el núcleo la agrega como asignaciones de memoria ordinarias. Esto puede generar confusión ya que el sistema parece tener mucha menos memoria libre de lo que se esperaría dada la carga de trabajo actual del sistema, pero es normal.
Para obtener el tamaño de ARC en megabytes, puede usar algo como awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
. (1,048,576 es el número de bytes al megabyte).
Por ejemplo, mi sistema (que usa ZFS casi exclusivamente) podría informar
$ free -m
total used free shared buffers cached
Mem: 32194 17948 14245 0 158 982
-/+ buffers/cache: 16808 15386
Swap: 49152 0 49152
$ awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
size 8138.73
$
lo que significa que el uso de memoria real por los procesos residentes actualmente es de aproximadamente 8,669 MB (16,808 MB reducido en 8,139 MB).