ZFS ARCのチューニング:上限、制限、および測定すべき項目
11分で読めます - 2026年6月24日

ワークロードに応じた ZFS ARC のチューニング。どの調整パラメータが重要か、Linux および FreeBSD での zfs_arc_max の設定方法、そしてチューニングが完了したかどうかを判断する方法について解説します。
ZFSはデフォルトで、システムRAMの約半分を静かに読み取りキャッシュとして使用します。不適切なサーバー環境では、これがスワップの発生、OOMによるプロセス強制終了、あるいはデータベースがファイルシステムとメモリを奪い合う事態を招く可能性があります。ZFSのARCチューニングとは、ARCが実際に保持することを許可するRAMの量を決定し、その制限を設定するために何を犠牲にするかを決めることです。 本記事では、ARCによるメモリの使用方法、設定を変更する前に測定すべき項目、変更する価値のある数少ない調整パラメータ、およびファイルサーバー、ハイパーバイザー、データベース、バックアップ先における適切な初期設定について解説します。ZFSのスナップショット機能については、ZFSスナップショットに関するガイドをご覧ください。
調整を行う前にARCを測定してください
通常の繁忙期のベースライン数値が得られるまでは、調整可能なパラメータを一切変更しないでください。閑散期のスナップショットでは、誤った方向へと導かれてしまいます。通常、ARCの挙動が注目されるのは、毎晩のバックアップ、週次レポート、バッチジョブの実行時であるため、数日にわたってデータを収集してください。
必要な機能のほとんどは、以下の3つのツールでカバーできます:
arcstat 1ヒットおよびミスカウンター、デマンドとプリフェッチの活動状況、現在のARCサイズをリアルタイムでスクロール表示します。負荷テストやバックアップウィンドウ中に使用してください。arc_summary単一のスナップショットを出力します:ARCサイズとターゲット、MFU/MRUの内訳、メタデータ比率、およびアクティブなチューナブル設定。arc_summary -s arcを実行すると、ARCセクションのみが表示されます。- 生のカウンタは
/proc/spl/kstat/zfs/arcstatsにあり、Linuxではkstat.zfs.miscおよびvfs.zfsFreeBSDのsysctlツリー内に存在します。フォーマット済みの出力を解析するのではなく、モニタリングからこれらを取得してください。
変更を行う前に記録しておくべきカウンターは以下の通りです:
| メトリック | 確認場所 | 重要度 |
|---|---|---|
ARCサイズ、ターゲット、最大値 (size, c, c_max) | arcstat, kstat | ARCが上限に達しているか、それともまだ拡大の余地があるかを示します |
| 要求データおよびメタデータのヒット率 | arcstat, arc_summary | デマンドのミスは、アプリケーションのレイテンシに直接影響します |
利用可能なメモリとスワップの活動状況 (si/so) | free -h, vmstat 1 | ARCのサイズが大きい状態でスワップイン/アウトが持続していることは、メモリ圧迫の最も明確な兆候です |
ディスクサービス時間(await)および使用率 | iostat -x | ARCのミスが実際のストレージのボトルネックと関連していることを示す |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | カウントの増加は、メモリ圧迫によりZFSがスロットリングされていることを裏付ける |
ここで多くの人が誤解しがちな点が2つあります。空きメモリではなく、利用可能メモリに注目してください。Linuxは、空きRAMが少ない状態でも安定した状態として報告しますが、それ自体は問題ではありません。 重要な指標は、利用可能メモリがゼロに近い状態と、持続的なスワップ活動が組み合わさった場合です(その理由については『Linuxメモリ管理入門』で解説されています)。また、ヒット率は目標値としてではなく、傾向として捉えてください。スワップが発生しているシステムで99%のヒット率を達成しても、それはチューニングの成功ではなく、失敗です。
重要な4つのARC調整項目
本番環境でのチューニングのほとんどは、4つの設定に集約されます。設定は、ベースラインで実際に測定された負荷に合わせて調整してください。スワップアクティビティの詳細は zfs_arc_maxに設定してください。ホットキャッシュを繰り返し消去し続けるチャーンの回収は zfs_arc_minに設定します。ディレクトリ探索が遅い場合は、メタデータ制限に原因があります。
| 調整パラメータ | 機能 | 変更すべきタイミング | 設定を誤った場合のリスク |
|---|---|---|---|
zfs_arc_max | ARC RAM 使用量の厳格な上限 | 予約済みRAMを必要とするデータベースやVMの共存 | 低すぎると:ディスクI/Oの増加とレイテンシの増加。高すぎると:スワップ圧力の増加またはOOM。 |
zfs_arc_min | ARCが過度に縮小するのを防ぐ下限値 | キャッシュを頻繁に消去し続けるような、短時間のメモリスパイクを伴うワークロード | 高すぎると:真のメモリ不足時にアプリケーションがリソース不足に陥る |
zfs_arc_meta_limit_percent | メタデータが利用可能なARCの割合(従来の zfs_arc_meta_limit) | 数百万の小さなファイル、深いディレクトリツリー、処理速度の低下 ls/find | 低すぎる:ディレクトリの検索が極端に遅くなる。高すぎる:データキャッシュが不足する。 |
zfs_arc_free_target | ZFS が利用可能に保とうとする空きシステムメモリの量 | 突然の大量割り当てが発生するサーバー(VMの起動、大規模なクエリプランなど) | 高すぎる場合:RAMに空きがあってもARCのサイズが小さいままである |
目に見える負荷に対処できる最小限の変更から始めましょう。 zfs_arc_max適切な上限値はワークロードによって異なります(次のセクションで説明します)。 zfs_arc_minについては、もし上限値が必要であれば、 zfs_arc_max を下限とするのが妥当な出発点となります(下限設定が必要な場合に限ります)。メタデータについては、最近の OpenZFS のデフォルト設定では、すでに zfs_arc_meta_limit_percent、これはほとんどのワークロードにとって十分な値です。この設定を変更するのは、 arcstat.
LinuxおよびFreeBSDでの変更の適用
Linux では、sysfs パラメータファイルに書き込むことで、実行時に変更をテストできます。再起動は不要です:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxこれにより zfs_arc_max を即座に16 GiBに設定します。再起動後も変更を反映させるには、これを /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184FreeBSDでは、実行時の変更には sysctl:
sysctl vfs.zfs.arc_max=17179869184同じ値を /boot/loader.conf:
vfs.zfs.arc_max="17179869184"設定の変更は一度に1つずつ、総RAMの約10%程度の小さなステップで行ってください。問題が発生するウィンドウを注視してください。スワップがゼロのままであり、レイテンシが安定している場合にのみ、その変更を維持してください。実行時テストに合格してから、その設定を永続化してください。
ワークロードに応じたARCのチューニング
総RAM容量から検討を始めるのは誤りです。ARCのサイジングは、そのサーバー上のワークロード構成に基づいて行う必要があります。
| ワークロード | 開始 zfs_arc_max | ARCの優先度 | 備考 | 主要な指標 |
|---|---|---|---|---|
| 専用ファイルサーバー/NAS | RAMの75%~80% | データおよびメタデータ | プリフェッチを有効にする。キャッシュを積極的に活用することがポイント。 | 全体的なヒット率 |
| 仮想化ホスト | RAMの30%~40% | バランス型 | ゲストのRAMやホストのタスクのために余裕を残しておく。ゼロ以外の値がある場合は si/so 場合は、上限をさらに引き上げてください。 | ホストのスワップ (si/so) |
| データベースサーバー | RAMの25%~50% | メタデータ中心の構成 | まずDBエンジン用にメモリを確保します。 primarycache=metadata エンジンが独自のバッファキャッシュを管理する場合は、これを設定します。 | デマンド・ミス |
| バックアップ/アーカイブのターゲット | 保守的な上限 | メタデータのみ | セット primarycache=metadata これにより、1回のスキャンで有用なブロックが排除されるのを防ぎます。 | プリフェッチのミス、メタデータのヒット率 |
| 分析 / 繰り返し読み取り | 他のキャッシュが確保された後の上限値の引き上げ | MFUが多発 | NVMe上のL2ARCは、クエリの実行間を通じてホットワーキングセットを維持できます。 | デマンドミス |
VMホストはゲストとメモリを共有する必要があるため、30%~40%の上限が安全なデフォルト設定であり、50%はほとんどのビルド環境においてすでに高すぎる。PostgreSQLやMySQLなどのデータベースは独自のバッファキャッシュを管理するため、まずエンジン用にメモリを確保し、残りをARCに割り当てる。 バックアップ先には次のような利点がある primarycache=metadata 。読み込まれたデータが再び必要になることはめったになく、毎晩のバックアップがプール全体を走査し、その過程でキャッシュの残りをフラッシュしてしまうような事態は避けたいからです。あらゆるワークロードにおいて、ARCが zfs_arc_max 状態にある際のスワップ活動は、上限が高すぎることを意味します。このルールは変わりません。
問題の診断と停止のタイミングの見極め
ARCのサイズが小さすぎると、システムに空きRAMがあるにもかかわらず、読み取りIOPSが高くなり、デマンドヒット率が低下し、ディレクトリの閲覧が遅くなるといった現象が見られます。一方、ARCのサイズが大きすぎる場合は、その兆候がそれほど明確ではありません。ヒット率は問題ないように見えますが、システムはスワップを開始し、負荷平均が上昇し、カーネルがオンデマンドでARCページを回収している間、プロセスは D 状態になり、最悪の場合、OOMキラーが犠牲となるプロセスの選定を開始します。キャッシュは正常に見えますが、サーバーのパフォーマンスは著しく低下します。
メタデータへの負荷は、 demand_metadata_bytes が demand_data_bytes よりも arc_summary。これは、メタデータがデータとスペースを奪い合っている状態であり、メタデータのパーセント制限を引き上げる価値があります。
確認すべき最初の設定と、実際に見られる状況を照らし合わせてください:
| 症状 | 考えられる原因 | 最初に確認すべき調整項目 | 次の手順 |
|---|---|---|---|
高い await 高需要時のミスが発生 | ワーキングセットがARCを超過している | zfs_arc_max | RAMを追加するか、L2ARCを追加する |
| ARCが大きな状態でのスワップ活動 | ARCがOSやアプリのリソースを圧迫している | zfs_arc_max | 上限を下げる |
| メモリ使用量が急増した後、パフォーマンスが低下する | 回収時の積極的なエヴィクション | zfs_arc_min | 上限の25%~50%を下限として設定する arc_max |
低速 ls, find、小規模ファイルの操作 | メタデータキャッシュの枯渇 | zfs_arc_meta_limit_percent | メタデータの割合を引き上げる |
増加中 memory_throttle_count | システム全体のメモリ負荷 | zfs_arc_max | 上限を引き下げる;L2ARCインデックスの肥大化を確認する |
L2ARCは無料ではありません。L2ARCエントリのインデックスはプライマリARC内に存在し、そのオーバーヘッドがARC総容量の約3分の1を超えると、セカンダリキャッシュはメリットよりもデメリットの方が大きくなります。 L2ARCを活用するのは、ワーキングセットがRAM容量を上回るものの、高速なNVMeデバイスに収まる場合に限るべきであり、かつプライマリARCのヒット率がすでに良好な状態にある場合のみとする。
チューニングを終了する適切なタイミングは、レイテンシが横ばいになり、当初の問題を引き起こしたのと同じ高負荷時間帯を通じてスワップがゼロのままであり、それ以上の変更によって改善が見込めなくなったときです。サーバーがスワップしている状態では、高いヒット率は意味をなしません。その時点を過ぎたら設定の調整を中止し、同じワークロード下で同じ問題が再発した場合にのみ、設定を見直してください。
VMやデータベースとメモリを奪い合うことなく、ZFSを適切に実行できるだけのRAMの余裕があるサーバーが必要な場合(実際にどれだけのRAMが必要かは、まず一読する価値があります)、FDCの専用サーバーをご検討ください。

デジタル眼精疲労:画面を長時間見続ける現代社会で視力を守る方法
一日中画面を見つめ続けていませんか?実証済みのテクニックやツールを活用して、デジタル眼精疲労を軽減する方法を学びましょう。このガイドは、リモートワーカー、開発者、そしてテクノロジー業界に携わるすべての人にとって欠かせないものです。
4分で読めます - 2025年5月21日
高性能でデータ転送量無制限のVPSが重要な理由
8分で読めます - 2025年5月9日

ご質問またはカスタムソリューションが必要ですか?
柔軟なオプション
グローバル・リーチ
即時展開
柔軟なオプション
グローバル・リーチ
即時展開