我读到 ZFS 被设置为在具有 4GB 或更多内存的系统上使用除 1GB 之外的所有物理内存。由于我的家庭服务器运行着运行 ZFS 文件系统的虚拟机,因此我想手动减少内存,以便我的虚拟机有分配的空间,并为未来的 KVM 部署留出一些喘息空间。
我知道在文件中设置以下/etc/modprobe.d/zfs.conf
行将限制 ZFS 仅使用 4GB。
options zfs zfs_arc_max=4294967296
重启后,htop 显示我的 RAM 的很大一部分已被分配,但还有很多未使用的空间。
然而,一段时间后,RAM 利用率将会增加,直到我们开始进入交换,如下所示:
家庭服务器的 Htop,按 RES 使用情况排序任务
问题
我是否配置不正确,或者我是否还需要设置其他内容以减少 ZFS 的占用空间?也许不是 ZFS,而是有其他我不知道的东西占用了我的 RAM?
额外信息
的输出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 GB。加上4294834528
ZFS ARC 显然拥有的字节数 (4GiB),应该只有 12 GiB,但您可以清楚地看到我超出了大约 3-4 GiB。也许 ARC 没有正确释放 RAM 或什么原因?
2015 年 5 月 5 日更新 - 临时解决方法
运行以下命令似乎可以清除内存使用情况此 YouTube 视频演示了。
sync; echo 2 | sudo tee /proc/sys/vm/drop_caches