linux:system:ram:info

Загальна інфо

Керуванням ОЗП займається ядро Linux (kernel), а саме його частина - MMU (Memory Management Unit).

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

Оперативна памʼять працює завжди на повну. Тут діє умовне правило Linux: вільна памʼять - марна памʼять.

Linux використовує ОЗП так:

  1. Used: памʼять яку реально зайняли програми (браузери, сервіси, веб-сервери).
  2. Buffers/Cache: кешування
    • Ядро бере “вільну” памʼять і завантажує туди дані з диска, до яких часто звертається користувач/служба.
    • Якщо програмі знадобиться додаткова памʼять, вона миттєво візьметься з Cache та віддасть її цій програмі.
    • Саме тому відбувається ситуація, наприклад: в системі 16ГБ памʼяті, під програми зайнято 4ГБ, а 12ГБ пішло під кеш. Це добре.
  3. SWAP (розділ підкачки або файл підкачки): це місце на диску (hdd/sdd), яке ядро використовує як продовження оперативної памʼяті.
    Навіщо він потрібен?
    • Аварійний запас: Коли RAM закінчується, ядро переміщує туди сторінки пам'яті, які використовуються рідко (анонімні сторінки), звільняючи місце в швидкій RAM для активних процесів.
    • Гібернація: В Debian або в інших системах, якщо ви використовуєте ноутбук, вміст RAM записується в Swap при гібернації.

Параметр vm.swappiness

Це налаштування (від 0 до 100), яке каже ядру, як агресивно використовувати Swap.

У Debian/Ubuntu за замовчуванням: 60.

Це означає, що ядро почне скидати дані в swap ще до того, як RAM заповниться на 100%, щоб зберегти місце для дискового кешу (файлових операцій).

Для серверів баз даних часто ставлять swappiness = 1 або 10, щоб максимально використовувати швидку RAM і не чіпати повільний диск. Це ВАЖЛИВО!

Що відбувається коли оперативна памʼять в 100%?

Це критична ситуація, яка може привести до повної зупинки системи.

  • Thrashing (Пробуксовка): Спочатку система починає “гальмувати”. Ядро панічно намагається звільнити пам'ять: скидає кеші, вивантажує дані в Swap, завантажує назад. Диск працює на 100%, процесор чекає даних (iowait). Система може перестати реагувати на клавіатуру та SSH.
  • Прихід OOM Killer: Коли фізична пам'ять забита і Swap теж забитий (або відсутній), ядро розуміє, що далі працювати неможливо. Тоді воно викликає механізм Out of Memory Killer (OOM Killer).
OOM Killer ( Out-Of-Memory Killer):

Це функція ядра, яка виконує роль “кіллера” процесів щоб підняти систему. Має спеціальну систему підрахунку пріоритетності або підрахунку балів (OOM Score). Тобто він не “вбиває” будь який процес, а спочатку підраховує OOM Score для кожного процесу.

  • Критичний: той хто займає більше памʼяті
  • Імунітет: системні процеси (sshd, init).
  • Є шанс: у тих хто працює довго, навідмінну від тих, хто запустився нещодавно і “зʼїв” усю памʼять.

Ви можете побачити цей рахунок у файлі: /proc/<PID>/oom_score.

У логах (/var/log/syslog або dmesg) це виглядає так: Out of memory: Kill process 1234 (mysqld) score 950 or sacrifice child

  • linux/system/ram/info.txt
  • Востаннє змінено: 16/05/2026 11:50
  • повз osvex