| |
| linux:system:ram:info [16/05/2026 11:00] – створено osvex | linux:system:ram:info [16/05/2026 11:50] (поточний) – osvex |
|---|
| ====== RAM, оперативна памʼять ====== | ====== Загальна інфо ====== |
| |
| Керуванням ОЗП займається **ядро Linux** (kernel), а саме його частина - MMU (Memory Management Unit). | Керуванням ОЗП займається **ядро Linux** (kernel), а саме його частина - MMU (Memory Management Unit). |
| |
| Оперативна памʼять працює завжди на повну. Тут діє умовне правило Linux: **вільна памʼять - марна памʼять. ** | Оперативна памʼять працює завжди на повну. Тут діє умовне правило Linux: **вільна памʼять - марна памʼять. ** |
| === Linux використовує ОЗП так: === | === Linux використовує ОЗП так: === |
| |
| - **Used**: памʼять яку реально зайняли програми (браузери, сервіси, веб-сервери). | - **Used**: памʼять яку реально зайняли програми (браузери, сервіси, веб-сервери). |
| - **Buffers/Cache:** кешування | - **Buffers/Cache:** кешування |
| * Ядро бере "вільну" памʼять і завантажує туди дані з диска, до яких часто звертається користувач/служба. | * Ядро бере "вільну" памʼять і завантажує туди дані з диска, до яких часто звертається користувач/служба. |
| * Якщо програмі знадобиться додаткова памʼять, вона миттєво візьметься з **Cache** та віддасть її цій програмі. | * Якщо програмі знадобиться додаткова памʼять, вона миттєво візьметься з **Cache** та віддасть її цій програмі. |
| * Саме тому відбувається ситуація, наприклад: в системі 16ГБ памʼяті, під програми зайнято 4ГБ, а 12ГБ пішло під кеш. Це добре. | * Саме тому відбувається ситуація, наприклад: в системі 16ГБ памʼяті, під програми зайнято 4ГБ, а 12ГБ пішло під кеш. Це добре. |
| - **SWAP (розділ підкачки або файл підкачки): ** це місце на диску (hdd/sdd), яке ядро використовує як **продовження оперативної памʼяті.** \\ Навіщо** ** він потрібен? | - **SWAP (розділ підкачки або файл підкачки): ** це місце на диску (hdd/sdd), яке ядро використовує як **продовження оперативної памʼяті.** \\ Навіщо він потрібен? |
| * **Аварійний запас:** Коли RAM закінчується, ядро переміщує туди сторінки пам'яті, які використовуються рідко (анонімні сторінки), звільняючи місце в швидкій RAM для активних процесів. | * **Аварійний запас:** Коли RAM закінчується, ядро переміщує туди сторінки пам'яті, які використовуються рідко (анонімні сторінки), звільняючи місце в швидкій RAM для активних процесів. |
| * **Гібернація:** В Debian або в інших системах, якщо ви використовуєте ноутбук, вміст RAM записується в Swap при гібернації. | * **Гібернація:** В Debian або в інших системах, якщо ви використовуєте ноутбук, вміст RAM записується в Swap при гібернації. |
| === Параметр vm.swappiness === | === Параметр vm.swappiness === |
| |
| Це налаштування (від 0 до 100), яке каже ядру, як агресивно використовувати Swap. | Це налаштування (від 0 до 100), яке каже ядру, як агресивно використовувати Swap. |
| * | * |
| |
| Для серверів баз даних часто ставлять ''swappiness = 1'' або ''10'', щоб максимально використовувати швидку RAM і не чіпати повільний диск.** Це ВАЖЛИВО!** | Для серверів баз даних часто ставлять ''swappiness = 1'' або ''10'', щоб максимально використовувати швидку RAM і не чіпати повільний диск.** Це ВАЖЛИВО!** |
| |
| === Що відбувається коли оперативна памʼять в 100%? === | === Що відбувається коли оперативна памʼять в 100%? === |
| |
| Це критична ситуація, яка може привести до повної зупинки системи. | Це критична ситуація, яка може привести до повної зупинки системи. |
| |
| * **Thrashing (Пробуксовка):** Спочатку система починає "гальмувати". Ядро панічно намагається звільнити пам'ять: скидає кеші, вивантажує дані в Swap, завантажує назад. Диск працює на 100%, процесор чекає даних (iowait). Система може перестати реагувати на клавіатуру та SSH. | * **Thrashing (Пробуксовка):** Спочатку система починає "гальмувати". Ядро панічно намагається звільнити пам'ять: скидає кеші, вивантажує дані в Swap, завантажує назад. Диск працює на 100%, процесор чекає даних (iowait). Система може перестати реагувати на клавіатуру та SSH. |
| * **Прихід OOM Killer:** Коли фізична пам'ять забита і Swap теж забитий (або відсутній), ядро розуміє, що далі працювати неможливо. Тоді воно викликає механізм **Out of Memory Killer (OOM Killer)**. | * **Прихід OOM Killer:** Коли фізична пам'ять забита і Swap теж забитий (або відсутній), ядро розуміє, що далі працювати неможливо. Тоді воно викликає механізм **Out of Memory Killer (OOM Killer)**. |
| == OOM Killer ( Out-Of-Memory Killer): == | == OOM Killer ( Out-Of-Memory Killer): == |
| |
| Це функція ядра, яка виконує роль "кіллера" процесів щоб підняти систему. Має спеціальну систему підрахунку пріоритетності або підрахунку балів (**OOM Score**). Тобто він не "вбиває" будь який процес, а спочатку підраховує **OOM Score ** для кожного процесу. | Це функція ядра, яка виконує роль "кіллера" процесів щоб підняти систему. Має спеціальну систему підрахунку пріоритетності або підрахунку балів (**OOM Score**). Тобто він не "вбиває" будь який процес, а спочатку підраховує **OOM Score ** для кожного процесу. |
| |
| * Критичний: той хто займає більше памʼяті | * Критичний: той хто займає більше памʼяті |
| Ви можете побачити цей рахунок у файлі: ''/proc/<PID>/oom_score''. | Ви можете побачити цей рахунок у файлі: ''/proc/<PID>/oom_score''. |
| |
| У логах (''/var/log/syslog'' або ''dmesg'') це виглядає так: ''Out of memory: Kill process 1234 (mysqld) score 950 or sacrifice child'' | У логах (''/var/log/syslog'' або ''dmesg'') це виглядає так: ''Out of memory: Kill process 1234 (mysqld) score 950 or sacrifice child'' |
| |