Настройка ZFS ARC: ограничения, пределы и что измерять

11 мин чтения - 24 июня 2026 г.

hero section cover
Содержание
  • Измерьте показатели ARC, прежде чем что-либо настраивать
  • Четыре важных параметра настройки ARC
  • Настройка ARC в зависимости от рабочей нагрузки
  • Диагностика проблем и понимание, когда следует остановиться
Поделиться

Настройка 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 , чтобы при сканировании за один проход не удалялись полезные блоки.Промахи при предварительной выборке, коэффициент попадания метаданных
Аналитика / повторное чтениеБолее высокий предел после резервирования других кэшейИнтенсивное использование MFUL2ARC на 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 с большим количеством пропусков запросовРабочий набор превышает ARCzfs_arc_maxУвеличить объем ОЗУ или добавить L2ARC
Активность подкачки при большом размере ARCARC ограничивает ресурсы ОС или приложений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.

Блог

События этой недели

Другие статьи
Цифровая усталость глаз: как защитить зрение в мире, где мы проводим много времени перед экранами

Цифровая усталость глаз: как защитить зрение в мире, где мы проводим много времени перед экранами

Всю день смотрите в экран? Узнайте, как снизить цифровую утомляемость глаз с помощью проверенных методов и инструментов. Это руководство незаменимо для удаленных сотрудников, разработчиков и всех, кто работает в сфере технологий.

4 мин чтения - 21 мая 2025 г.

Почему важно иметь мощный VPS без ограничений по трафику

8 мин чтения - 9 мая 2025 г.

Другие статьи
background image

У вас есть вопросы или вам нужно индивидуальное решение?

icon

Гибкие варианты

icon

Глобальный охват

icon

Мгновенное развертывание

icon

Гибкие варианты

icon

Глобальный охват

icon

Мгновенное развертывание