ZFS - всегда недостаточно памяти
Я читал, что ZFS был настроен на использование всей физической памяти, кроме 1 ГБ в системах с 4 ГБ или более. Поскольку у меня есть виртуальные машины, на которых запущен мой домашний сервер с файловой системой ZFS, я хотел вручную уменьшить это, чтобы мои виртуальные машины распределили пространство, и у меня есть некоторое пространство для будущих развертываний KVM.
Я понял, что установка следующей строки в /etc/modprobe.d/zfs.conf
файл будет ограничивать ZFS только использованием 4 ГБ.
options zfs zfs_arc_max=4294967296
После перезагрузки htop показывает, что значительная часть моей оперативной памяти была выделена, но есть много неиспользуемого пространства.
Однако через некоторое время загрузка ОЗУ будет увеличиваться, пока мы не начнем перестановку, как показано ниже:
Htop Home Server с задачами, отсортированными по использованию RES
Вопрос
Я что-то настроил неправильно, или мне нужно настроить что-то еще, чтобы уменьшить нагрузку на ZFS? Возможно, это не ZFS, но есть что-то еще, что ест мою оперативную память, о которой я не знаю?
Дополнительная информация
Выход из cat /proc/spl/kstat/zfs/arcstats
как следует:
5 1 0x01 85 4080 4981548270 615775159747876
name type data
hits 4 46287364
misses 4 2610021
demand_data_hits 4 30804990
demand_data_misses 4 578061
demand_metadata_hits 4 9829556
demand_metadata_misses 4 357556
prefetch_data_hits 4 2489500
prefetch_data_misses 4 1569248
prefetch_metadata_hits 4 3163318
prefetch_metadata_misses 4 105156
mru_hits 4 12907488
mru_ghost_hits 4 114469
mfu_hits 4 27727068
mfu_ghost_hits 4 464039
deleted 4 2749215
recycle_miss 4 8133
mutex_miss 4 740
evict_skip 4 62122
evict_l2_cached 4 0
evict_l2_eligible 4 270710646272
evict_l2_ineligible 4 122732333056
hash_elements 4 268203
hash_elements_max 4 268941
hash_collisions 4 7490083
hash_chains 4 71651
hash_chain_max 4 9
p 4 1982394368
c 4 4294967296
c_min 4 4194304
c_max 4 4294967296
size 4 4294834528
hdr_size 4 86552992
data_size 4 3125542912
meta_size 4 526384640
other_size 4 556353984
anon_size 4 540672
anon_evict_data 4 0
anon_evict_metadata 4 0
mru_size 4 1985674752
mru_evict_data 4 1692532736
mru_evict_metadata 4 124579328
mru_ghost_size 4 2308680192
mru_ghost_evict_data 4 1841692672
mru_ghost_evict_metadata 4 466987520
mfu_size 4 1665712128
mfu_evict_data 4 1432485888
mfu_evict_metadata 4 56686592
mfu_ghost_size 4 1953543680
mfu_ghost_evict_data 4 1462370304
mfu_ghost_evict_metadata 4 491173376
l2_hits 4 0
l2_misses 4 0
l2_feeds 4 0
l2_rw_clash 4 0
l2_read_bytes 4 0
l2_write_bytes 4 0
l2_writes_sent 4 0
l2_writes_done 4 0
l2_writes_error 4 0
l2_writes_hdr_miss 4 0
l2_evict_lock_retry 4 0
l2_evict_reading 4 0
l2_free_on_write 4 0
l2_abort_lowmem 4 0
l2_cksum_bad 4 0
l2_io_error 4 0
l2_size 4 0
l2_asize 4 0
l2_hdr_size 4 0
l2_compress_successes 4 0
l2_compress_zeros 4 0
l2_compress_failures 4 0
memory_throttle_count 4 0
duplicate_buffers 4 0
duplicate_buffers_size 4 0
duplicate_reads 4 0
memory_direct_count 4 2561
memory_indirect_count 4 36032
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_prune 4 0
arc_meta_used 4 1169291616
arc_meta_limit 4 3221225472
arc_meta_max 4 1490740400
Обновить
Я запустил инструмент ps-mem для разбивки памяти, используемой всеми приложениями, и он составляет всего 8,3 ГБ. Что в сочетании с 4294834528
байты (4 ГБ), которые, очевидно, у ZFS ARC, должны достигать только 12 ГиБ, но вы можете ясно видеть, что я превышаю это примерно еще на 3-4 ГиБ. Возможно, ARC неправильно высвобождает RAM или что-то еще?
Обновление 5 мая 2015 г. - Временное решение
Запуск следующей команды, чтобы очистить использование памяти, как показано в этом видео YouTube.
sync; echo 2 | sudo tee /proc/sys/vm/drop_caches
1 ответ
ZFS также использует много места SLAB в ядре. Вы можете проверить, сколько SLAB он использует, либо проверив /proc/meminfo
или установкой nmon
,
Более подробную информацию об использовании плит можно найти в разделе /proc/slabinfo
а также /proc/spl/kmem/slab
Стоит прочитать это, чтобы понять больше об использовании памяти ZFS.