Перейти до вмісту

Модуль 5.3: Керування пам'яттю

Hands-On Lab Available
Ubuntu advanced 35 min
Launch Lab ↗

Opens in Killercoda in a new tab

Продуктивність Linux | Складність: [MEDIUM] | Час: 30–35 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після завершення цього модуля ви зможете:

  • Пояснити керування пам’яттю в Linux (віртуальна пам’ять, page cache, swap, OOM killer)
  • Діагностувати проблеми з пам’яттю за допомогою free, vmstat та /proc/meminfo
  • Налаштувати ліміти пам’яті та поведінку OOM killer для контейнерних навантажень
  • Передбачити, коли спрацює OOM killer та який процес він завершить

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

Пам’ять у Linux — це набагато більше, ніж просто «зайнято проти вільно». Ядро агресивно кешує дані, повертає сторінки під навантаженням і вбиває процеси, коли RAM закінчується. Розуміння цього механізму пояснює, чому контейнери отримують OOM Killed.

Розуміння керування пам’яттю допоможе вам:

  • Правильно встановлювати ліміти — розуміти, що насправді означає “used”.
  • Відлагоджувати OOM kills — чому ваш под був термінований?
  • Розуміти кешування — чому низький показник “free” не є проблемою.
  • Налаштовувати продуктивність — коли додавати swap, а коли — ні.

Ліміти пам’яті в Kubernetes — це “аварійний вимикач”, а не “педаль гальма”.


Пам’ять: Категорії та реальність

Розділ «Пам’ять: Категорії та реальність»
Terminal window
# Подивитися розподіл пам'яті
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. Він вибирає “найгірший” процес і вбиває його, щоб врятувати систему.

Як він вибирає жертву?

Розділ «Як він вибирає жертву?»

Кожен процес має oom_score (0-1000). Чим вищий бал — тим більша ймовірність смерті. Бал залежить від споживання пам’яті та пріоритету (nice).

Kubernetes налаштовує oom_score_adj для подів:

  • Guaranteed (limit=request): Найвищий захист.
  • Burstable (limit>request): Середній захист.
  • BestEffort (немає лімітів): Перші кандидати на вбивство.

Swap — це файл або розділ на диску, куди ядро скидає сторінки пам’яті, що рідко використовуються.

У Kubernetes зазвичай вимикають Swap, оскільки:

  1. Важко передбачити продуктивність (диск у 1000 разів повільніший за RAM).
  2. Алгоритми планування K8s розраховані на фіксовані ресурси.
  3. Коли починається активний “свопінг”, система починає “гальмувати” так сильно, що простіше вбити процес і перезапустити його на іншому вузлі.

  1. Чому низький показник “free” пам’яті в Linux — це нормально?

    Відповідь Linux використовує всю вільну пам'ять для кешування дискових операцій (page cache), щоб прискорити систему. Ця пам'ять позначається як "available" і миттєво віддається програмам, якщо вона їм потрібна.
  2. Яка різниця між лімітами CPU та лімітами Memory в Kubernetes?

    Відповідь Перевищення ліміту CPU призводить до сповільнення (throttling). Перевищення ліміту Memory призводить до негайного вбивства процесу (OOM Kill). Пам'ять — це "не-стислий" ресурс.
  3. Який бал oom_score має процес, який ви точно не хочете вбивати?

    Відповідь Найнижчий можливий (близький до 0 або негативне значення в `oom_score_adj`).
  4. Що таке “available” пам’ять у виводі free?

    Відповідь Це сума вільної пам'яті та частини кешу, яку ядро може безпечно звільнити без шкоди для стабільності системи. Це реальний обсяг пам'яті для ваших програм.

Завдання: Дослідити споживання пам’яті та кеш.

  1. Перевірте стан пам’яті:
    Terminal window
    free -h
  2. Знайдіть свій oom_score:
    Terminal window
    cat /proc/$$/oom_score
  3. Спробуйте очистити кеш (тільки якщо ви root):
    Terminal window
    sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
  4. Подивіться, як змінився показник free (він має зрости, а cache — зменшитися).

Критерії успіху: Ви вмієте розрізняти free та available пам’ять і знаєте, як знайти OOM бал процесу.


  • Кеш — це добре. Linux використовує RAM ефективно.
  • Available — головна метрика. Free не має значення.
  • Memory limit — жорсткий. Перевищення = смерть процесу.
  • Swap у Kubernetes зазвичай шкідливий.

Далі: Модуль 5.4: Продуктивність I/O — дізнайтеся про дискові операції, вузькі місця сховищ та вибір файлових систем.