Модуль 5.3: Керування пам'яттю
Продуктивність Linux | Складність:
[MEDIUM]| Час: 30–35 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 5.1: Метод USE
- Обов’язково: Модуль 2.2: Контрольні групи (cgroups)
- Бажано: Модуль 1.3: Ієрархія файлової системи
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Пояснити керування пам’яттю в Linux (віртуальна пам’ять, page cache, swap, OOM killer)
- Діагностувати проблеми з пам’яттю за допомогою free, vmstat та /proc/meminfo
- Налаштувати ліміти пам’яті та поведінку OOM killer для контейнерних навантажень
- Передбачити, коли спрацює OOM killer та який процес він завершить
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Пам’ять у Linux — це набагато більше, ніж просто «зайнято проти вільно». Ядро агресивно кешує дані, повертає сторінки під навантаженням і вбиває процеси, коли RAM закінчується. Розуміння цього механізму пояснює, чому контейнери отримують OOM Killed.
Розуміння керування пам’яттю допоможе вам:
- Правильно встановлювати ліміти — розуміти, що насправді означає “used”.
- Відлагоджувати OOM kills — чому ваш под був термінований?
- Розуміти кешування — чому низький показник “free” не є проблемою.
- Налаштовувати продуктивність — коли додавати swap, а коли — ні.
Ліміти пам’яті в Kubernetes — це “аварійний вимикач”, а не “педаль гальма”.
Пам’ять: Категорії та реальність
Розділ «Пам’ять: Категорії та реальність»Команда free -h
Розділ «Команда free -h»# Подивитися розподіл пам'ятіfree -h# total used free shared buff/cache available# Mem: 15Gi 4.2Gi 2.1Gi 512Mi 9.1Gi 10Gi| Категорія | Значення |
|---|---|
| total | Загальний обсяг встановленої RAM. |
| used | Пам’ять, що використовується (включаючи кеш). |
| free | Повністю порожня пам’ять (зазвичай її дуже мало). |
| buff/cache | Буфери та кеш файлової системи (можуть бути миттєво звільнені). |
| available | Скільки пам’яті реально доступно для нових програм. |
Золоте правило: Оцінюйте систему за показником available, а не free.
OOM Killer (Out-Of-Memory Killer)
Розділ «OOM Killer (Out-Of-Memory Killer)»Коли пам’ять повністю вичерпана і ядро не може звільнити кеш, воно активує OOM Killer. Він вибирає “найгірший” процес і вбиває його, щоб врятувати систему.
Як він вибирає жертву?
Розділ «Як він вибирає жертву?»Кожен процес має oom_score (0-1000). Чим вищий бал — тим більша ймовірність смерті. Бал залежить від споживання пам’яті та пріоритету (nice).
OOM в Kubernetes
Розділ «OOM в Kubernetes»Kubernetes налаштовує oom_score_adj для подів:
- Guaranteed (limit=request): Найвищий захист.
- Burstable (limit>request): Середній захист.
- BestEffort (немає лімітів): Перші кандидати на вбивство.
Swap та контейнери
Розділ «Swap та контейнери»Swap — це файл або розділ на диску, куди ядро скидає сторінки пам’яті, що рідко використовуються.
У Kubernetes зазвичай вимикають Swap, оскільки:
- Важко передбачити продуктивність (диск у 1000 разів повільніший за RAM).
- Алгоритми планування K8s розраховані на фіксовані ресурси.
- Коли починається активний “свопінг”, система починає “гальмувати” так сильно, що простіше вбити процес і перезапустити його на іншому вузлі.
Тест
Розділ «Тест»-
Чому низький показник “free” пам’яті в Linux — це нормально?
Відповідь
Linux використовує всю вільну пам'ять для кешування дискових операцій (page cache), щоб прискорити систему. Ця пам'ять позначається як "available" і миттєво віддається програмам, якщо вона їм потрібна. -
Яка різниця між лімітами CPU та лімітами Memory в Kubernetes?
Відповідь
Перевищення ліміту CPU призводить до сповільнення (throttling). Перевищення ліміту Memory призводить до негайного вбивства процесу (OOM Kill). Пам'ять — це "не-стислий" ресурс. -
Який бал
oom_scoreмає процес, який ви точно не хочете вбивати?Відповідь
Найнижчий можливий (близький до 0 або негативне значення в `oom_score_adj`). -
Що таке “available” пам’ять у виводі
free?Відповідь
Це сума вільної пам'яті та частини кешу, яку ядро може безпечно звільнити без шкоди для стабільності системи. Це реальний обсяг пам'яті для ваших програм.
Практична вправа
Розділ «Практична вправа»Завдання: Дослідити споживання пам’яті та кеш.
- Перевірте стан пам’яті:
Terminal window free -h - Знайдіть свій
oom_score:Terminal window cat /proc/$$/oom_score - Спробуйте очистити кеш (тільки якщо ви root):
Terminal window sync; echo 3 | sudo tee /proc/sys/vm/drop_caches - Подивіться, як змінився показник
free(він має зрости, аcache— зменшитися).
Критерії успіху: Ви вмієте розрізняти free та available пам’ять і знаєте, як знайти OOM бал процесу.
Підсумок
Розділ «Підсумок»- Кеш — це добре. Linux використовує RAM ефективно.
- Available — головна метрика. Free не має значення.
- Memory limit — жорсткий. Перевищення = смерть процесу.
- Swap у Kubernetes зазвичай шкідливий.
Далі: Модуль 5.4: Продуктивність I/O — дізнайтеся про дискові операції, вузькі місця сховищ та вибір файлових систем.