Настройка ZFS ARC: ограничения, пределы и что следует измерять
11 мин чтения - 24 июня 2026 г.

Настройка ZFS ARC в зависимости от рабочей нагрузки. Какие параметры имеют значение, как настроить zfs_arc_max в Linux и FreeBSD, и как определить, что настройка завершена.
По умолчанию ZFS незаметно занимает примерно половину оперативной памяти системы для своего кэша чтения, и на неподходящем сервере это может привести к активности свопа, завершению процессов из-за нехватки памяти (OOM) или к конкуренции между базой данных и файловой системой за память. Настройка ARC в ZFS заключается в том, чтобы определить, какой объём этой оперативной памяти ARC действительно разрешено удерживать, и чем придётся пожертвовать для установки этого предела. В этой статье рассказывается о том, как ARC использует память, что следует измерить, прежде чем что-либо менять, о нескольких параметрах, которые стоит изменить, а также о разумных начальных настройках для файловых серверов, гипервизоров, баз данных и целей резервного копирования. Что касается моментальных снимков ZFS, см. наше руководство по моментальным снимкам ZFS.
Измерьте показатели ARC, прежде чем что-либо настраивать
Не изменяйте ни одного настраиваемого параметра, пока не получите базовые показатели за обычный период пиковой нагрузки. Снимки, сделанные в периоды низкой нагрузки, могут ввести вас в заблуждение. Ночные резервные копии, еженедельные отчеты и пакетные задания — это именно те моменты, когда поведение ARC становится особенно интересным, поэтому собирайте данные в течение нескольких дней.
Три инструмента покрывают большую часть ваших потребностей:
arcstat 1обеспечивает прокручиваемый в реальном времени обзор счетчиков попаданий и промахов, соотношения активности запросов и предварительной загрузки, а также текущего размера ARC. Используйте его во время нагрузочных тестов и в окнах резервного копирования.arc_summaryвыводит отдельный снимок: размер ARC и целевое значение, соотношение MFU/MRU, соотношения метаданных и активные настройки. Запускайтеarc_summary -s arcтолько для раздела ARC.- Исходные счетчики находятся
/proc/spl/kstat/zfs/arcstatsв Linux и подkstat.zfs.miscиvfs.zfsдеревьях sysctl в FreeBSD. Извлекайте эти данные из систем мониторинга, а не путем разбора отформатированного вывода.
Счетчики, которые стоит зафиксировать перед любыми изменениями:
| Показатель | Где найти | Почему это важно |
|---|---|---|
Размер 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 ограничивается из-за нехватки памяти |
Здесь люди обычно допускают две ошибки. Следите за доступной памятью, а не за свободной; Linux без проблем сообщает о низком объёме свободной ОЗУ как о стабильном состоянии, и само по себе это не является проблемой. Важным сигналом является доступная память, близкая к нулю, в сочетании с постоянной активностью свопа (в введении в управление памятью Linux объясняется, почему). И рассматривайте коэффициент попадания как тенденцию, а не как целевой показатель. Коэффициент попадания 99 % на системе, использующей своп, — это провал настройки, а не успех.
Четыре важных параметра настройки ARC
Большая часть настройки в производственной среде сводится к четырём параметрам. Подберите настройку в соответствии с давлением, которое вы фактически измерили в базовом тесте. Активность обмена указывает на zfs_arc_max. Восстановление данных, удаляемых из «горячего» кэша, указывает на zfs_arc_min. Медленное прохождение каталогов указывает на предел метаданных.
| Параметр | Что он делает | Когда менять | Риск при неправильном значении |
|---|---|---|---|
zfs_arc_max | Жесткий верхний предел использования ОЗУ ARC | Совместное размещение баз данных или виртуальных машин, которым требуется зарезервированная оперативная память | Слишком низкое значение: увеличение дисковых операций ввода-вывода и задержки. Слишком высокое значение: нагрузка на своп или нехватка памяти (OOM). |
zfs_arc_min | Минимальное значение, предотвращающее резкое сокращение ARC | Рабочие нагрузки с кратковременными всплесками использования памяти, которые постоянно очищают кэш | Слишком высокое значение: приводит к дефициту памяти для приложений при реальной нехватке памяти |
zfs_arc_meta_limit_percent | Доля ARC, доступная для метаданных (заменяет старую zfs_arc_meta_limit) | миллионы мелких файлов, глубокие дерева каталогов, медленная ls/find | Слишком низкое значение: поиск по каталогам происходит крайне медленно. Слишком высокое значение: ограничивает кэширование данных. |
zfs_arc_free_target | Объём свободной системной памяти, который ZFS старается держать в доступном состоянии | Серверы с внезапными пиками выделения памяти (запуск виртуальных машин, большие планы запросов) | Слишком высокое значение: ARC остаётся небольшим, даже если ОЗУ доступно |
Начните с минимального изменения, которое устраняет наблюдаемую нагрузку. Что касается zfs_arc_max, правильное верхнее ограничение зависит от рабочей нагрузки (это рассмотрено в следующем разделе). Для zfs_arc_min, минимальное значение от 25% до 50% от zfs_arc_max является разумной отправной точкой, если она вообще нужна. Что касается метаданных, то в последних версиях OpenZFS по умолчанию им уже выделяется 75 % ARC посредством 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=17179869184В FreeBSD для изменений во время работы используется sysctl:
sysctl vfs.zfs.arc_max=17179869184Зафиксируйте то же значение в /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Изменяйте по одному параметру за раз, небольшими шагами — примерно на 10 % от общего объёма ОЗУ. Следите за окном с информацией о проблемах. Сохраняйте изменение только в том случае, если размер подкачки остаётся равным нулю, а задержка стабильна. Сохраняйте настройку только после успешного прохождения теста во время работы системы.
Настройка ARC в зависимости от рабочей нагрузки
Объём оперативной памяти — не то, с чего следует начинать. Размер ARC должен определяться в зависимости от состава рабочих нагрузок на сервере.
| Рабочая нагрузка | Начальный zfs_arc_max | Приоритет ARC | Примечания | Ключевой показатель |
|---|---|---|---|---|
| Выделенный файловый сервер / NAS | От 75% до 80% оперативной памяти | Данные и метаданные | Предварительная загрузка включена. Главное — агрессивный кэширование. | Общий коэффициент попадания |
| Хост виртуализации | От 30% до 40% объёма ОЗУ | Сбалансированный | Оставьте запас для ОЗУ гостевой системы и задач хоста. Любое значение, отличное от нуля, si/so значение означает необходимость дальнейшего ограничения. | Область подкачки хоста (si/so) |
| Сервер базы данных | от 25% до 50% объёма оперативной памяти | С преобладанием метаданных | Сначала зарезервируйте память для движка БД. Установите primarycache=metadata , если движок самостоятельно управляет собственным буферным кэшем. | Промахи по запросам |
| Цель резервного копирования / архивирования | Консервативное ограничение | Только метаданные | Набор primarycache=metadata , чтобы при сканировании за один проход не удалялись полезные блоки. | Промахи при предварительной выборке, коэффициент попадания метаданных |
| Аналитика / повторное чтение | Более высокий предел после резервирования других кэшей | Интенсивное использование MFU | L2ARC на NVMe может сохранять «горячий» рабочий набор между выполнениями запросов. | Промахи по запросам |
Хост виртуальной машины должен делить память со своими гостями, поэтому ограничение от 30% до 40% является безопасным значением по умолчанию, а 50% уже слишком высоко для большинства конфигураций. Базы данных, такие как PostgreSQL и MySQL, самостоятельно управляют своими буферными кэшами, поэтому сначала следует зарезервировать память для движка, а оставшуюся часть предоставить ARC. Цели резервного копирования выигрывают от primarycache=metadata потому что читаемые данные редко требуются повторно, и нежелательно, чтобы ночное резервное копирование просматривало весь пул и очищало остальную часть кэша по ходу работы. Для любой рабочей нагрузки активность свопа при закрепленном значении ARC на уровне zfs_arc_max означает, что ограничение установлено слишком высоко; это правило не меняется.
Диагностика проблем и понимание, когда следует остановиться
Недостаточный размер ARC проявляется в высоких показателях IOPS чтения, низком коэффициенте попаданий по запросам и медленном просмотре каталогов, при этом в системе остаётся свободная оперативная память. Чрезмерный размер ARC проявляется менее очевидно. Коэффициент попаданий выглядит нормально, но система начинает использовать свопинг, средние показатели нагрузки растут, процессы блокируются в D состоянии, пока ядро освобождает страницы ARC по требованию, а в худшем случае OOM-киллер начинает выбирать жертв. Кэш выглядит исправным, а сервер работает ужасно.
Нагрузка на метаданные проявляется, когда demand_metadata_bytes значительно превышает demand_data_bytes в arc_summary. Это означает, что метаданные борются с данными за место, и стоит повысить процентный лимит метаданных.
Сопоставьте наблюдаемые симптомы с первым параметром, который следует проверить:
| Симптом | Вероятная причина | Первый параметр, который следует проверить | Следующий шаг |
|---|---|---|---|
Высокий await с большим количеством пропусков запросов | Рабочий набор превышает ARC | zfs_arc_max | Увеличить объем ОЗУ или добавить L2ARC |
| Активность подкачки при большом размере ARC | ARC ограничивает работу ОС или приложений | 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, вторичный кэш приносит больше вреда, чем пользы. Используйте L2ARC только в том случае, если рабочий набор превышает объем ОЗУ, но при этом по-прежнему помещается на быстром устройстве NVMe, и только тогда, когда коэффициент попадания в основной ARC уже находится на нормальном уровне.
Подходящий момент для прекращения настройки — это когда задержка стабилизировалась, объем свопа остается нулевым в том же периоде высокой нагрузки, который вызвал исходную проблему, и дальнейшие изменения уже не приносят никаких улучшений. Высокий коэффициент попадания не имеет значения, если сервер использует своп. После достижения этой точки прекратите корректировку настроек и возвращайтесь к ним только в том случае, если та же проблема повторится при той же нагрузке.
Если вам нужен сервер с достаточным запасом ОЗУ для корректной работы ZFS без борьбы за память с виртуальными машинами или базами данных (стоит сначала ознакомиться со статьёй «Сколько ОЗУ вам действительно нужно»), обратите внимание на выделенные серверы FDC.

Как разместить модели Ollama AI на выделенных серверах
Узнайте, как размещать модели Ollama AI на выделенных серверах для обеспечения безопасности данных, масштабируемости и повышения производительности.
5 мин чтения - 8 сентября 2025 г.

У вас есть вопросы или вам нужно индивидуальное решение?
Гибкие варианты
Глобальный охват
Мгновенное развертывание
Гибкие варианты
Глобальный охват
Мгновенное развертывание