
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 的答案為基礎,您也可以使用arc_summary.py。
在這裡您可以看到 ARC 如何使用我桌面一半的記憶體:
root@host:~# free -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.11m 目前元素:53.48% 592.56k 碰撞次數:763.42k 最大鏈數:4 鏈條:19.62k ARC總瀏覽量:36.34m 快取命中率:87.02% 31.62m 快取未命中率:12.98% 472萬 實際命中率: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% 22.64m 預取資料: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% 23.99m 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_等分 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_恢復 0 l2arc_淨空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 zvol_major 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 noop 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_逾時 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 zfetch_array_rd_sz 1048576 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