Kod ZFS zgłasza różne statystyki za pomocą procfs. Aby określić rozmiar ARC, spójrz na /proc/spl/kstat/zfs/arcstats
(zakładając, że procfs zamontowano w / proc, jak zwykle), a konkretnie wartości dla c
, c_max
i size
. (Zobacz też ten post na forum społeczności Oracle . Alternatywny Kopia archiwum internetowego w przypadku niedostępności witryny Oracle.)
c
jest rozmiar docelowy ARC w bajtach
c_max
jest największy rozmiar ARC w bajtach
size
jest obecny rozmiar ARC w bajtach
Maksymalny rozmiar ARC może być regulowany przez podanie zfs_arc_max=N
parametr do zfs
moduł (przez modprobe), gdzie N
to maksymalny rozmiar ARC w bajtach lub w locie przez zapisanie nowego maksymalnego rozmiaru w bajtach do /sys/module/zfs/parameters/zfs_arc_max
.
Z powodu jak ZFS w systemie Linux jest zaimplementowany, pamięć ARC zachowuje się jak pamięć podręczna (na przykład jest eksmitowana, jeśli system znajduje się pod presją pamięci), ale jest zagregowane przez jądro jako zwykłe przydziały pamięci. Może to prowadzić do nieporozumień, ponieważ wydaje się, że system ma znacznie mniej wolnej pamięci, niż można by oczekiwać, biorąc pod uwagę obecne obciążenie systemu, ale jest to normalne.
Aby uzyskać rozmiar ARC w megabajtach, możesz użyć czegoś takiego awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
. (1,048,576 to liczba bajtów do megabajta.)
Na przykład mój system (który używa prawie wyłącznie ZFS) może zgłosić
$ 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
$
co oznacza, że rzeczywisty wykorzystanie pamięci przez aktualnie rezydentne procesy wynosi około 8 669 MB (16 808 MB zmniejszone o 8 139 MB).