Налаштування 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 ГіБ. Щоб зміна збереглася після перезавантаження, додайте її до /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 вже є задовільним.
Правильний момент для припинення налаштування — це коли затримка залишається стабільною, обмін даними на дисковий простір (swap) залишається на нульовому рівні протягом того самого періоду високого навантаження, що й спричинив початкову проблему, а подальші зміни вже не дають жодного поліпшення. Високий коефіцієнт влучень нічого не означає, якщо сервер використовує обмін даних на дисковий простір. Після досягнення цієї межі припиніть коригування налаштувань і повертайтеся до них лише у разі повторного виникнення тієї самої проблеми за того самого навантаження.
Якщо вам потрібен сервер із достатнім запасом оперативної пам’яті для належного функціонування ZFS без конкуренції за пам’ять із вашими віртуальними машинами чи базами даних (спочатку варто прочитати, скільки оперативної пам’яті вам насправді потрібно), зверніть увагу на виділені сервери FDC.

Цифрова втома очей: як захистити зір у світі, де ми проводимо багато часу перед екранами
Цілий день дивитеся в екран? Дізнайтеся, як зменшити цифрове перенапруження очей за допомогою перевірених методів та інструментів. Цей посібник є незамінним для віддалених працівників, розробників та всіх, хто працює у сфері технологій.
4 хв читання - 21 травня 2025 р.
Чому важливо мати потужний VPS без обмежень трафіку
8 хв читання - 9 травня 2025 р.

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