ZFS 使用 ARC(自适应替换缓存),而这在传统的 Linux“缓存”内存使用中并未考虑在内。如何确定 ZFS ARC 的当前大小以及大小边界,以及这些与例如 报告的可用或缓存内存量有何关系free
?
答案1
ZFS 代码通过 procfs 报告各种统计数据。要确定 ARC 的大小,请查看(假设 procfs 按照惯例安装在 /proc 上),特别是、和/proc/spl/kstat/zfs/arcstats
的值。(另请参阅c
c_max
size
Oracle 社区论坛上的这篇文章。 选择互联网档案副本以防 Oracle 网站不可用。)
c
是个目标尺寸ARC 的字节数c_max
是个最大尺寸ARC 的字节数size
是个目前的规模ARC 的字节数
zfs_arc_max=N
可以通过向模块传递参数zfs
(通过 modprobe)来调整 ARC 的最大大小,其中N
是 ARC 的最大大小(以字节为单位),或者通过将新的最大大小(以字节为单位)写入 来动态调整/sys/module/zfs/parameters/zfs_arc_max
。
因为如何Linux 上的 ZFS实施后,ARC 内存行为类似于缓存内存(例如,当系统面临内存压力时,它会被驱逐),但汇总内核将其视为普通内存分配。这可能会导致混乱,因为系统似乎拥有的可用内存远少于当前系统工作负载所预期的内存,但这是正常的。
要获取 ARC 大小(以兆字节为单位),您可以使用类似awk '/^size/ { print $1 " " $3 / 1048576 }' < /proc/spl/kstat/zfs/arcstats
. (1,048,576 是每兆字节的字节数。)
例如,我的系统(几乎只使用 ZFS)可能会报告
$ 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
$
这意味着实际的当前驻留进程的内存使用量约为 8,669 MB(16,808 MB 减少了 8,139 MB)。
答案2
为了建立在 Michael Kjörling 的答案的基础上,您还可以使用弧摘要.py。
在这里你可以看到 ARC 如何使用我桌面的一半内存:
root@host:~# 免费 -g 已使用的、可用的、缓存的共享缓冲区总数 内存:62 56 6 1 1 5 -/+ 缓冲区/缓存:49 13 交换:7 0 7 root@host:~# arc_summary.py ------------------------------------------------------------------------------------ ZFS 子系统报告 2017 年 2 月 24 日星期五 19:44:20 ARC 摘要:(健康) 内存限制数量:0 ARC 杂项: 删除:1.33m 互斥未命中:99 逐出跳过:99 ARC 大小:98.13% 30.80 GiB 目标大小:(自适应)100.00% 31.39 GiB 最小大小(硬限制):0.10% 32.00 MiB 最大大小(高水位):1004:1 31.39 GiB ARC 尺寸细分: 最近使用的缓存大小:84.25% 26.45 GiB 常用缓存大小:15.75% 4.95 GiB ARC 哈希分解: 元素最大值:1.11米 元素当前:53.48% 592.56k 碰撞:763.42k 最大连锁:4 连锁:19.62k ARC 总访问量:3634万 缓存命中率:87.02% 31.62m 缓存未命中率:12.98% 4.72m 实际命中率:84.78% 30.81m 数据需求效率:93.49% 24.22m 数据预取效率:2.57% 819.12k 缓存命中率(按缓存列表): 匿名使用:2.27% 716.60k 最近使用:17.26% 5.46m 最常用:80.17% 25.35m 最近使用的 Ghost:0.19% 60.25k 最常用的 Ghost:0.11% 35.37k 按数据类型划分的缓存命中数: 需求数据:71.60% 2264万 预取数据:0.07% 21.04k 需求元数据:25.82% 816万 预取元数据:2.51% 794.39k 按数据类型划分的缓存未命中情况: 需求数据:33.44% 158万 预取数据:16.92% 798.09k 需求元数据:48.90% 231万 预取元数据:0.75% 35.27k DMU 预取效率:173.06m 命中率:86.14% 149.07m 未命中率:13.86% 2399万 ZFS 可调参数: metaslab_debug_load 0 zfs_arc_min_prefetch_lifespan 0 zfetch_max_streams 8 zfs_nopwrite_enabled 1 zfetch_min_sec_reap 2 zfs_dbgmsg_enable 0 zfs_dirty_data_max_max_percent 25 zfs_arc_p_aggressive_disable 1 spa_load_verify_data 1 zfs_zevent_cols 80 zfs_dirty_data_max_percent 10 zfs_sync_pass_dont_compress 5 l2arc_write_max 8388608 zfs_vdev_scrub_max_active 2 zfs_vdev_sync_write_min_active 10 zvol_prefetch_bytes 131072 metaslab_aliquot 524288 zfs_no_scrub_prefetch 0 zfs_arc_shrink_shift 0 zfetch_block_cap 256 zfs_txg_history 0 zfs_delay_scale 500000 zfs_vdev_async_write_active_min_dirty_percent 30 metaslab_debug_unload 0 zfs_read_history 0 zvol_max_discard_blocks 16384 zfs_recover 0 l2arc_headroom 2 zfs_deadman_synctime_ms 1000000 zfs_scan_idle 50 zfs_free_min_time_ms 1000 zfs_dirty_data_max 6741298790 zfs_vdev_async_read_min_active 1 zfs_mg_noalloc_threshold 0 zfs_dedup_prefetch 0 zfs_vdev_max_active 1000 l2arc_write_boost 8388608 zfs_resilver_min_time_ms 3000 zfs_vdev_async_write_max_active 10 zil_slog_limit 1048576 zfs_prefetch_disable 0 zfs_resilver_delay 2 metaslab_lba_weighting_enabled 1 zfs_mg_fragmentation_threshold 85 l2arc_feed_again 1 zfs_zevent_console 0 zfs_immediate_write_sz 32768 zfs_dbgmsg_maxsize 4194304 zfs_free_leak_on_eio 0 zfs_deadman_enabled 1 metaslab_bias_enabled 1 zfs_arc_p_dampener_disable 1 zfs_object_mutex_size 64 zfs_metaslab_fragmentation_threshold 70 zfs_no_scrub_io 0 metaslabs_per_vdev 200 zfs_dbuf_state_index 0 zfs_vdev_sync_read_min_active 10 metaslab_fragmentation_factor_enabled 1 zvol_inhibit_dev 0 zfs_vdev_async_write_active_max_dirty_percent 60 zfs_vdev_cache_size 0 zfs_vdev_mirror_switch_us 10000 zfs_dirty_data_sync 67108864 spa_config_path /etc/zfs/zpool.cache zfs_dirty_data_max_max 16853246976 zfs_arc_lotsfree_percent 10 zfs_zevent_len_max 128 zfs_scan_min_time_ms 1000 zfs_arc_sys_free 0 zfs_arc_meta_strategy 1 zfs_vdev_cache_bshift 16 zfs_arc_meta_adjust_restarts 4096 zfs_max_recordsize 1048576 zfs_vdev_scrub_min_active 1 zfs_vdev_read_gap_limit 32768 zfs_arc_meta_limit 0 zfs_vdev_sync_write_max_active 10 l2arc_norw 0 zfs_arc_meta_prune 10000 metaslab_preload_enabled 1 l2arc_nocompress 0 音量_主要 230 zfs_vdev_aggregation_limit 131072 zfs_flags 0 spa_asize_inflation 24 zfs_admin_snapshot 0 l2arc_feed_secs 1 zio_taskq_batch_pct 75 zfs_sync_pass_deferred_free 2 zfs_disable_dup_eviction 0 zfs_arc_grow_retry 0 zfs_read_history_hits 0 zfs_vdev_async_write_min_active 1 zfs_vdev_async_read_max_active 3 zfs_scrub_delay 4 zfs_delay_min_dirty_percent 60 zfs_free_max_blocks 100000 zfs_vdev_cache_max 16384 zio_delay_max 30000 zfs_top_maxinflight 32 忽略洞出生 1 spa_slop_shift 5 zfs_vdev_write_gap_limit 4096 spa_load_verify_metadata 1 spa_load_verify_maxinflight 10000 l2arc_noprefetch 1 zfs_vdev_scheduler 无操作 zfs_expire_snapshot 300 zfs_sync_pass_rewrite 2 zil_replay_disable 0 zfs_nocacheflush 0 zfs_arc_max 0 zfs_arc_min 0 zfs_read_chunk_size 1048576 zfs_txg_timeout 5 zfs_pd_bytes_max 52428800 l2arc_headroom_boost 200 zfs_send_corrupt_data 0 l2arc_feed_min_ms 200 zfs_arc_meta_min 0 zfs_arc_average_blocksize 8192 复制代码 zfs_autoimport_disable 1 zfs_arc_p_min_shift 0 zio_requeue_io_start_cut_in_line 1 zfs_vdev_sync_read_max_active 10 zfs_mdcomp_disable 0 zfs_arc_num_sublists_per_state 8