我在 CentOS 7 服务器上遇到了一个问题,我创建了一个 ZFS 池以及(当前)一个正在运行的 KVM VM(CentOS 6 客户机)。Top 报告称 VM 使用了我系统内存的大约 50%(这是正确的 - 我已将其配置为总共 32 GB 中的 16 GB),但是 free 报告称我正在使用的活动内存约为 26 GB。虽然我已将 ZFS 限制为仅使用 4 GB 用于 ARC,但某个地方还有 10 GB 的额外 RAM 在使用,我根本找不到它。Top 显示没有其他使用内存的情况:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10928 qemu 20 0 20.773g 0.015t 680 S 55.8 50.7 12148:34 qemu-kvm
530 root 20 0 59376 7940 7796 S 0.0 0.0 1:52.59 systemd-journal
1913 root 20 0 1063816 5820 3120 S 0.0 0.0 0:01.36 libvirtd
9005 root 20 0 135612 5344 4092 S 0.0 0.0 0:01.69 sshd
8637 root 20 0 135612 5336 4092 S 0.0 0.0 0:00.42 sshd
1 root 20 0 50960 4360 2152 S 0.0 0.0 0:12.09 systemd
11597 postfix 20 0 91636 3892 2892 S 0.0 0.0 0:00.00 pickup
1400 root 20 0 378052 3168 2076 S 0.0 0.0 0:04.18 NetworkManager
8651 root 20 0 115452 2140 1672 S 0.0 0.0 0:00.13 bash
9020 root 20 0 115352 2056 1632 S 0.0 0.0 0:00.00 bash
Free 没有关于 RAM 位置的详细信息(不,它不是文件系统缓存,据报告它正在使用中):
total used free shared buffers cached
Mem: 31974 26534 5439 13 0 90
-/+ buffers/cache: 26444 5530
Swap: 1999 925 1074
我的 ZFS 统计数据报告 ARC 在正常范围内:
5 1 0x01 85 4080 3000154942 1126206978029170
name type data
hits 4 626600066
misses 4 531647209
demand_data_hits 4 324930179
demand_data_misses 4 239380938
demand_metadata_hits 4 246080774
demand_metadata_misses 4 33168747
prefetch_data_hits 4 55239743
prefetch_data_misses 4 256749089
prefetch_metadata_hits 4 349370
prefetch_metadata_misses 4 2348435
mru_hits 4 170996240
mru_ghost_hits 4 146648139
mfu_hits 4 412479249
mfu_ghost_hits 4 55201631
deleted 4 522830695
recycle_miss 4 688200803
mutex_miss 4 5494038
evict_skip 4 263172839174
evict_l2_cached 4 2293824808448
evict_l2_eligible 4 3235679258112
evict_l2_ineligible 4 711594439680
hash_elements 4 1003039
hash_elements_max 4 31494585
hash_collisions 4 453192154
hash_chains 4 298915
hash_chain_max 4 105
p 4 1899257344
c 4 4294967296
c_min 4 4194304
c_max 4 4294967296
size 4 4294703744
hdr_size 4 428382448
data_size 4 3463036928
meta_size 4 268575232
other_size 4 101467000
anon_size 4 2181120
anon_evict_data 4 0
anon_evict_metadata 4 0
mru_size 4 1823588352
mru_evict_data 4 1620893696
mru_evict_metadata 4 92227584
mru_ghost_size 4 2367817728
mru_ghost_evict_data 4 1721548800
mru_ghost_evict_metadata 4 646268928
mfu_size 4 1905842688
mfu_evict_data 4 1840373760
mfu_evict_metadata 4 17820160
mfu_ghost_size 4 1927131648
mfu_ghost_evict_data 4 1881784320
mfu_ghost_evict_metadata 4 45347328
l2_hits 4 124320745
l2_misses 4 404820103
l2_feeds 4 1128427
l2_rw_clash 4 52038
l2_read_bytes 4 474159669248
l2_write_bytes 4 246928839168
l2_writes_sent 4 541747
l2_writes_done 4 541747
l2_writes_error 4 0
l2_writes_hdr_miss 4 6389
l2_evict_lock_retry 4 1037
l2_evict_reading 4 3
l2_free_on_write 4 3709466
l2_abort_lowmem 4 1752
l2_cksum_bad 4 0
l2_io_error 4 0
l2_size 4 2306560512
l2_asize 4 2249048064
l2_hdr_size 4 33242136
l2_compress_successes 4 45560845
l2_compress_zeros 4 0
l2_compress_failures 4 7074167
memory_throttle_count 4 0
duplicate_buffers 4 0
duplicate_buffers_size 4 0
duplicate_reads 4 0
memory_direct_count 4 140693
memory_indirect_count 4 222279
arc_no_grow 4 0
arc_tempreserve 4 0
arc_loaned_bytes 4 0
arc_prune 4 36031794
arc_meta_used 4 831666816
arc_meta_limit 4 3221225472
arc_meta_max 4 10590063600
这是当前的 ZFS 配置:
pool: pool
state: ONLINE
scan: scrub repaired 0 in 1h33m with 0 errors on Sat Dec 6 02:33:48 2014
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sda ONLINE 0 0 0
sdb ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
sdc ONLINE 0 0 0
sdd ONLINE 0 0 0
logs
mirror-2 ONLINE 0 0 0
ata-INTEL_SSDSA2CW120G3_BTPR13600113120LGN-part3 ONLINE 0 0 0
ata-INTEL_SSDSA2CW120G3_BTPR152503LQ120LGN-part3 ONLINE 0 0 0
cache
ata-INTEL_SSDSA2CW120G3_BTPR13600113120LGN-part4 ONLINE 0 0 0
ata-INTEL_SSDSA2CW120G3_BTPR152503LQ120LGN-part4 ONLINE 0 0 0
errors: No known data errors
看来我有 6+ GB 的内存,刚刚消失了从系统中,我不确定这里发生了什么。有人能解释一下吗?
谢谢。
答案1
您拥有很多 L2ARC... 比您应该拥有的多。这并非全是魔法... 一些 ZFS 最佳实践应该成为设计的一部分。
L2ARC 需要映射到实际 RAM 中。我记得的最佳做法是每 5GB L2ARC 对应约 1GB RAM。因此,您有 172GB 的 L2ARC... 系统需要调整为约 34.5GB RAM 以用于 ZFS。为虚拟机占用大量内存显然会影响这一点。
尝试使用不带 L2ARC 的该系统或使用更少量的 L2ARC。
在我的环境中,我会在添加 L2ARC 设备之前优化 RAM。有人说,除非您有 64GB 或更多 RAM,否则您不应该走这条路。如果您有备用 SSD 并想使用它们,请创建一个 SSD 池。