Модуль 34

Оптимізація продуктивності Linux

Ось готовий урок, створений спеціально для тебе у стилі David Malan. Вмикай увагу, поїхали! 🚀


🎓 УРОК: Оптимізація продуктивності Linux: Як знайти "гальма"?

Привіт, друзі! Радий бачити вас на цій лекції. Сьогодні ми не просто будемо писати команди в термінал. Сьогодні ми станемо діагностами. Ми навчимося "слухати серцебиття" нашої системи.


1. 🔥 Вступ: Проблема та мотивація

Уявіть ситуацію. Ви запустили свій крутий стартап. Ваш веб-сервер працював ідеально, поки туди заходили тільки ви та ваша мама. Але раптом — успіх! Тисячі користувачів. І тут... все зависло.

Сервер не відповідає. Клієнти скаржаться. Ваш бос (або внутрішній голос) кричить: "Чому все так повільно?!".

Що ви зробите? 1. Перезавантажите сервер і будете молитися? (Це рішення "новачка", і воно допомагає лише на 5 хвилин). 2. Купите вдвічі дорожчий сервер? (Це дорого і не гарантує успіху). 3. Чи, можливо, заглянете "під капот", щоб зрозуміти, хто саме з’їдає всі ресурси?

Чому без цього не обійтись? Linux — це не чорна скринька. Це як кухня у великому ресторані. Якщо замовлення видаються повільно, причина може бути різною: * 👨‍🍳 CPU (Процесор): Кухар нарізає овочі надто повільно (або кухар один, а замовлень сотня). * 🍱 RAM (Пам'ять): Робочий стіл завалений, і кухарю ніде поставити тарілку. * 🐌 Disk I/O (Диск): Інгредієнти лежать у підвалі, і за кожною цибулиною треба бігати сходами. * 🌐 Network (Мережа): Офіціанти не встигають відносити готові страви.

Сьогодні ми навчимося знаходити, хто винен на цій кухні, і як це виправити.


2. 🧠 Теоретична база (без сухої академічності)

Перш ніж бігти оптимізувати, треба зрозуміти, що ми вимірюємо.

Головна мантра: USE Method

Це те, що треба запам'ятати назавжди. Для будь-якого ресурсу (CPU, RAM, Disk) перевіряємо три речі: 1. Utilization (Використання): Скільки часу ресурс зайнятий корисною роботою? (наприклад, 80%). 2. Saturation (Насичення): Чи є черга з завдань, які чекають? (кухар зайнятий, а 10 чеків висять). 3. Errors (Помилки): Чи ламається щось? (розбиті тарілки).

Ключове поняття: Load Average

Ви побачите це число всюди (наприклад, 0.5, 1.0, 5.0). * Інтуїтивно: Це "завантаженість дороги". * Як це працює: Якщо у вас 1-ядерний процесор: * 1.00 — процесор працює на 100%, черги немає. Ідеально. * 0.50 — процесор простоює половину часу. * 5.00 — процесор працює на повну, і ще 4 процеси стоять у черзі, чекаючи свого часу. Це "затор". * Важливо: Якщо ядер 4, то Load Average = 4.00 — це норма (по 100% на кожне ядро).

Swap (Своп)

Це "милиця" для оперативної пам'яті. Коли RAM закінчується, Linux починає скидати дані на жорсткий диск. * Чому це погано: Диск у тисячі разів повільніший за RAM. Якщо система пішла в Swap — це як замість того, щоб взяти річ зі столу, ви щоразу бігаєте за нею на склад у сусіднє місто.


3. 🧪 Приклади (від простого до реального)

Приклад 1: Знайомство з top

Це ваш головний інструмент. Відкрийте термінал і введіть top.

(Перед тим як дивитися на екран, запитайте себе: де тут найважливіша цифра?)

Що ми бачимо:

top - 10:00:01 up 10 days,  load average: 0.15, 0.50, 0.60
%Cpu(s):  5.0 us,  2.0 sy,  0.0 ni, 93.0 id,  0.0 wa ...
MiB Mem : 7900.0 total, 1500.0 free, 3200.0 used ...

Розшифровка: * load average: за 1, 5 і 15 хвилин. Якщо цифри ростуть — проблема посилюється. * %Cpu(s) -> id (idle): 93.0% — процесор відпочиває. Все добре. * wa (iowait): Дуже важливо! Це час, коли процесор нічого не робить, бо чекає на диск. Якщо тут висока цифра — проблема не в коді, а в повільному диску/базі даних.

Приклад 2: "Невидиме гальмо" (High I/O Wait)

Уявіть, що ваш сайт гальмує, але top показує, що CPU використовується лише на 10%. Студенте, як гадаєш, чому так може бути? . . . Відповідь: Процесор швидкий, але він постійно чекає (Status D у процесах). Скоріше за все, якийсь процес (наприклад, бекап або база даних) "ґвалтує" диск, і всі інші стоять у черзі за доступом до файлів. Для цього ми використовуємо команду iotop або дивимось на колонку wa в top.


4. 🛠 Практична частина

Час забруднити руки! Виконайте ці завдання у своєму Linux (або віртуальній машині).

Завдання 1: Знайди ненажеру 1. Запустіть top. 2. Натисніть M (Shift+M), щоб відсортувати процеси за споживанням пам'яті. 3. Натисніть P (Shift+P), щоб відсортувати за CPU. Хто у вашій системі споживає найбільше ресурсів просто зараз?

Завдання 2: Штучний стрес (Увага! Тільки на тестовій машині) Встановіть утиліту stress (sudo apt install stress). Запустіть навантаження на 2 ядра на 30 секунд: stress --cpu 2 --timeout 30 Паралельно в іншому вікні відкрийте htop або top. * Як змінився Load Average? * Чи змінився відсоток %id (idle)?

Завдання 3: Аналіз "Зомбі" Іноді процеси помирають, але залишаються у списку як Z (Zombie). Знайдіть у виводі top рядок: Tasks: ... zombie. * Скільки у вас зомбі-процесів? (В ідеалі — 0).

Завдання 4: Міні-кейс У вас є сервер з 4 ГБ RAM. Ви запускаєте програму, яка потребує 5 ГБ. * Що станеться? (Опишіть процес своїми словами, використовуючи терміни Swap та OOM Killer). * Як перевірити, скільки вільного місця в оперативній пам'яті? (Команда free -h).

Завдання 5: Питання "А що, якщо..." А що, якщо Load Average високий (наприклад, 10.0), але CPU us (user) і sy (system) майже нульові? Де шукати проблему? (Підказка: згадайте приклад про кухню і підвал з інгредієнтами).


5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в оптимізації?

Новачок думає: "Ой, все висне. Треба переписати код на C++ або купити сервер за $5000." Він діє навмання. Змінює налаштування, які знайшов на форумі 2010 року.

Досвідчений інженер думає: 1. Спочатку виміряй. Не оптимізуй те, що не є "вузьким місцем" (bottleneck). 2. Локалізуй проблему. Це CPU? RAM? Disk? Network? 3. Закон Парето: 20% коду створюють 80% навантаження. Знайди ці 20%. 4. Кешування — твій друг. Найшвидша операція — та, яку не довелося виконувати. Якщо результат можна зберегти і віддати готовим — зроби це.

Порада: Завжди тримайте відкритим htop на другому моніторі під час навантажувальних тестів. Це як спідометр в машині — ви повинні бачити динаміку.


6. 🧩 Підсумок

Ну що, видихаємо! 🌬️

Сьогодні ми розібрали, що "повільний Linux" — це не магія, а набір вимірюваних параметрів. Ви тепер вмієте: 1. Розуміти, що таке Load Average і чому це не тільки про процесор. 2. Використовувати USE Method для пошуку проблем. 3. Читати вивід top як професіонал, а не просто дивитися на матрицю цифр. 4. Розрізняти проблеми з CPU та проблеми з I/O (диском).

Тизер наступного уроку: Окей, ми знайшли процес, який "поклав" сервер. Ми його вбили. Але що, якщо він запускається знову щоночі? На наступному уроці ми поговоримо про Автоматизацію та скрипти Bash, щоб сервер лікував себе сам, поки ви спите.

А поки — успіхів у коді, і нехай ваш Load Average завжди буде низьким! 💻👋