Налаштування 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 ГіБ. Щоб зміна збереглася після перезавантаження, додайте її до /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 вже є задовільним.

Правильний момент для припинення налаштування — це коли затримка залишається стабільною, обмін даними на дисковий простір (swap) залишається на нульовому рівні протягом того самого періоду високого навантаження, що й спричинив початкову проблему, а подальші зміни вже не дають жодного поліпшення. Високий коефіцієнт влучень нічого не означає, якщо сервер використовує обмін даних на дисковий простір. Після досягнення цієї межі припиніть коригування налаштувань і повертайтеся до них лише у разі повторного виникнення тієї самої проблеми за того самого навантаження.

Якщо вам потрібен сервер із достатнім запасом оперативної пам’яті для належного функціонування ZFS без конкуренції за пам’ять із вашими віртуальними машинами чи базами даних (спочатку варто прочитати, скільки оперативної пам’яті вам насправді потрібно), зверніть увагу на виділені сервери FDC.

Блог

На цьому тижні

Більше статей
Цифрова втома очей: як захистити зір у світі, де ми проводимо багато часу перед екранами

Цифрова втома очей: як захистити зір у світі, де ми проводимо багато часу перед екранами

Цілий день дивитеся в екран? Дізнайтеся, як зменшити цифрове перенапруження очей за допомогою перевірених методів та інструментів. Цей посібник є незамінним для віддалених працівників, розробників та всіх, хто працює у сфері технологій.

4 хв читання - 21 травня 2025 р.

Чому важливо мати потужний VPS без обмежень трафіку

8 хв читання - 9 травня 2025 р.

Більше статей
background image

Маєте запитання або потребуєте індивідуального рішення?

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання

icon

Гнучкі варіанти

icon

Глобальне охоплення

icon

Миттєве розгортання