Модуль 0.3: Путівник по процесах і ресурсах
Щоденне використання | Складність:
[QUICK]| Час: 40 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 0.1: Досвідчений користувач CLI
- Бажано: Модуль 0.2: Оточення та Дозволи
- Середовище: Будь-яка система Linux (VM, WSL або нативна)
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Моніторити системні ресурси за допомогою top, htop, free, df та du
- Визначити процеси, що споживають багато ресурсів, і вирішити, оптимізувати їх чи завершити
- Пояснити load average, CPU steal та тиск на пам’ять у контексті здоров’я вузлів K8s
- Діагностувати повільну систему, систематично перевіряючи CPU, пам’ять, диск та мережу
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Ваша машина Linux прямо зараз запускає десятки — іноді сотні — програм одночасно. Ваш браузер, термінал, SSH-сесія, той забутий скрипт завантаження дводенної давнини. Ці запущені програми називаються процесами. Вміння знаходити їх, спостерігати за ними та зупиняти їх — одна з найважливіших навичок у DevOps.
Ось чому:
- Налагодження починається з процесів — Коли щось працює повільно або зламалося, перше питання завжди: «що зараз запущено і скільки ресурсів воно їсть?»
- Сервери не лагодяться самі — Процес, що “збунтувався” і споживає 100% CPU о 3-й ночі, сам не зупиниться. Ви повинні знати, як його вбити.
- Місце на диску зникає — Контейнери, логи та тимчасові файли заповнюють ваші диски. Вміння знаходити, що саме поглинає простір, рятує ваші продакшн-системи.
- Kubernetes запускає процеси — Кожен контейнер — це процес.
kubectl exec, завершення роботи пода, ліміти ресурсів — усе це базується на тому, що ви вивчите тут.
Думайте про це так: Модуль 0.1 навчив вас орієнтуватися в будинку. Цей модуль вчить перевіряти, хто вдома, чим вони займаються, і ввічливо (або силоміць) просити їх піти.
Чи знали ви?
Розділ «Чи знали ви?»-
У вашій системі є сімейне дерево процесів — Кожен процес має батька. Найперший процес (PID 1) є предком усього іншого. Коли ви відкриваєте термінал і запускаєте
ls, ваша оболонка є батьком, аls— дитиною. Вбийте PID 1 — і вся система впаде. У Kubernetes ваш застосунок стає PID 1 всередині контейнера — саме тому обробка сигналів така важлива. -
killне завжди вбиває — Попри назву, командаkillнасправді надсилає сигнали. Командаkillбез опцій надсилає SIGTERM, що є ввічливим проханням: «будь ласка, заверши роботу». Процес може це повністю ігнорувати! Тількиkill -9(SIGKILL) є справді фатальним, бо його обробляє ядро, а процес навіть не встигає його помітити. -
Linux винайшов процеси-«зомбі» — Процес-зомбі — це той, що завершив роботу, але все ще висить у таблиці процесів, бо його батько не отримав його статус виходу. Зомбі не споживають ні CPU, ні пам’яті — це просто рядок у списку. Але якщо їх накопичаться тисячі, у вас закінчаться ідентифікатори процесів (PID) і нічого нового не зможе запуститися.
-
Директорія
/proc— це вікно в кожен процес — Кожен запущений процес отримує папку за шляхом/proc/<PID>/, повну живої інформації. Хочете знати, яка саме команда запустила процес 1234? Прочитайте/proc/1234/cmdline. Хочете бачити його змінні оточення?/proc/1234/environ. Це не лог-файл — це ядро розповідає вам, що відбувається прямо зараз.
Що таке процес?
Розділ «Що таке процес?»Процес — це просто програма, яка зараз виконується. Коли ви вводите ls у терміналі, програма ls завантажується в пам’ять, робить свою роботу і завершується. Поки вона працює — це процес.
Кожен процес отримує:
- PID (Process ID) — унікальний номер-ідентифікатор.
- Батьківський PID (PPID) — номер процесу, який його запустив.
- Ресурси — пам’ять, час процесора, відкриті файли.
Аналогія: програма на диску — це як рецепт у кулінарній книзі. Процес — це те, що відбувається, коли ви реально починаєте готувати: у вас є інгредієнти на столі, каструлі на плиті й таймери, що цокають.
Перегляд запущених процесів: ps
Розділ «Перегляд запущених процесів: ps»Команда ps робить знімок (snapshot) запущених процесів — думайте про це як про фотографію, а не відео.
Базове використання
Розділ «Базове використання»# Показати процеси у вашій поточній сесії терміналаpsВивід виглядає так:
PID TTY TIME CMD 1234 pts/0 00:00:00 bash 5678 pts/0 00:00:00 psЦе лише ваша оболонка і сама команда ps. Не дуже цікаво. Щоб побачити все:
Всемогутня команда ps aux
Розділ «Всемогутня команда ps aux»# Показати ВСІ процеси від УСІХ користувачівps aux| Колонка | Що вона каже |
|---|---|
| USER | Хто володіє процесом |
| PID | Номер-ідентифікатор процесу |
| %CPU | Скільки процесора він використовує прямо зараз |
| %MEM | Скільки оперативної пам’яті він використовує |
| VSZ | Віртуальний розмір пам’яті (разом із бібліотеками — часто вводить в оману) |
| RSS | Resident Set Size — реальна фізична пам’ять, що використовується (те, що вас цікавить) |
| TTY | До якого термінала підключений (? означає фонову службу) |
| STAT | Стан процесу (див. нижче) |
| TIME | Загальний час процесора, витрачений процесом |
| COMMAND | Команда, що запустила процес |
Пошук конкретного процесу
Розділ «Пошук конкретного процесу»Не гортайте сотні рядків. Фільтруйте:
# Знайти всі процеси, що мають "nginx" у назвіps aux | grep nginx
# Краще: використовуйте pgrep (без зайвого шуму grep у результатах)pgrep -a nginxКоди станів (STAT)
Розділ «Коди станів (STAT)»Ви побачите літери в колонці STAT:
| Код | Значення |
|---|---|
| S | Sleeping (Спить) — чекає на щось (більшість процесів) |
| R | Running (Працює) — активно використовує процесор прямо зараз |
| T | Stopped (Зупинено) — поставлено на паузу |
| Z | Zombie (Зомбі) — завершено, але батько ще не “прибрав” за ним |
| D | Disk sleep — чекає на ввід/вивід (I/O), неможливо перервати |
Моніторинг у реальному часі: top та htop
Розділ «Моніторинг у реальному часі: top та htop»Якщо ps — це фотографія, то top — це “панель приладів” наживо, що оновлюється кожні кілька секунд.
Основи top
Розділ «Основи top»# Запустити toptopВерхня секція дає огляд системи:
- load average: Три числа (1-хв, 5-хв, 15-хв). Якщо вони вищі за кількість ядер вашого CPU, система перевантажена. На 4-ядерній машині load average 4.0 — це межа.
- Tasks: Скільки всього процесів і в яких вони станах.
- %Cpu:
us— програми користувача,sy— ядро,id— бездіяльність (чим більшеid, тим краще!),wa— очікування диска.
Корисні клавіші під час роботи top:
| Клавіша | Дія |
|---|---|
q | Вийти |
M | Сортувати за пам’яттю |
P | Сортувати за процесором (CPU) |
k | Вбити процес (запитає PID) |
1 | Показати навантаження на кожне ядро окремо |
htop — покращений top
Розділ «htop — покращений top»htop — це сучасна версія top з кольорами, підтримкою миші та набагато зручнішим інтерфейсом. Зазвичай його треба встановлювати окремо:
# Встановлення htop (Debian/Ubuntu)sudo apt update && sudo apt install htop -y
# ЗапускhtopЧому htop кращий:
- Кольорові індикатори CPU та RAM зверху.
- Можна гортати список стрілками.
F5— деревоподібний вигляд (хто кого запустив).F9— зручне надсилання сигналів./— швидкий пошук за назвою.
Зупинка процесів: Сигнали, kill та killall
Розділ «Зупинка процесів: Сигнали, kill та killall»Іноді процес треба зупинити. Можливо, він завис, “з’їв” усю пам’ять або просто більше не потрібен. Тут допомагають сигнали.
Що таке сигнали?
Розділ «Що таке сигнали?»Сигнали — це повідомлення, які операційна система надсилає процесу. Думайте про це як про поплескування по плечу (SIGTERM) проти силового витягування з кімнати (SIGKILL).
Два найважливіші сигнали:
| Сигнал | Номер | Що відбувається |
|---|---|---|
| SIGTERM | 15 | ”Будь ласка, заверши роботу ввічливо”. Процес отримує сигнал і може прибрати за собою: зберегти файли, закрити з’єднання. Це правильний шлях. |
| SIGKILL | 9 | ”Ти вбитий. Прямо зараз”. Ядро завершує процес миттєво. Жодного прибирання, жодних останніх слів. Використовуйте, тільки якщо SIGTERM не допоміг. |
Використання kill
Розділ «Використання kill»Попри назву, kill просто надсилає сигнал. За замовчуванням — SIGTERM:
# Надіслати SIGTERM (завжди пробуйте це першим)kill 1234
# Надіслати SIGKILL (крайній захід)kill -9 1234Використання killall та pkill
Розділ «Використання killall та pkill»Якщо ви знаєте назву програми, але не знаєте PID:
# Вбити всі процеси з назвою "nginx"killall nginx
# Вбити за частиною назвиpkill sleep
# Вбити всі процеси конкретного користувачаpkill -u usernameЗолоте правило: Спочатку SIGTERM, потім SIGKILL
Розділ «Золоте правило: Спочатку SIGTERM, потім SIGKILL»Завжди дотримуйтесь цього порядку:
kill <PID>(SIGTERM) — зачекайте кілька секунд.kill -9 <PID>(SIGKILL) — тільки якщо процес усе ще живий.
У Kubernetes та сама логіка: при видаленні пода K8s надсилає SIGTERM, чекає 30 секунд (grace period) і тільки потім надсилає SIGKILL.
Фонова та передньопланова робота (Jobs)
Розділ «Фонова та передньопланова робота (Jobs)»Зазвичай команда займає ваш термінал, поки не завершиться. Але що, як ви хочете запустити щось довге і продовжити працювати?
Запуск у фоні через &
Розділ «Запуск у фоні через &»Додайте & в кінці будь-якої команди:
# Запустити sleep у фоні на 5 хвилинsleep 300 &# Вивід: [1] 12345 (номер завдання та PID)Керування завданнями: jobs, fg, bg
Розділ «Керування завданнями: jobs, fg, bg»# Список фонових завдань у поточному терміналіjobs
# Ви запустили щось довге і забули про &, термінал заблоковано?# Натисніть Ctrl+Z, щоб ПРИЗУПИНИТИ процес.
# Тепер запустіть його у ФОНІ (продовжити виконання)bg
# Або поверніть фонове завдання на ПЕРЕДНІЙ ПЛАНfgВиживання при відключенні: nohup
Розділ «Виживання при відключенні: nohup»Коли ви закриваєте термінал або SSH-сесію, всі запущені в ньому процеси зазвичай вмирають (отримують сигнал SIGHUP). nohup (no hangup) дозволяє процесу жити далі:
# Це виживе навіть після закриття SSHnohup ./long-script.sh &Використання диска: Куди зникло місце?
Розділ «Використання диска: Куди зникло місце?»Коли диск переповнюється, сервіси починають падати. Вам потрібні два інструменти: df для загальної картини та du для пошуку винних.
df — Disk Free (Загальний вигляд)
Розділ «df — Disk Free (Загальний вигляд)»# Показати вільне місце в зручному (M, G) форматіdf -hДивіться на колонку Use%. Якщо там понад 90% — час діяти.
du — Disk Usage (Детектив)
Розділ «du — Disk Usage (Детектив)»df каже, який диск повний. du допомагає знайти конкретні папки:
# Знайти 10 найбільших папок у системі (ігноруємо помилки доступу)du -sh /* 2>/dev/null | sort -rh | head -10Тактика пошуку: починайте з кореня du -sh /*, знаходьте найбільшу папку (наприклад, /var), потім заходьте глибше: du -sh /var/* і так далі, поки не знайдете конкретний файл-винуватець (часто це старий гігантський лог).
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це погано | Що робити замість цього |
|---|---|---|
Використання kill -9 відразу | Процес не встигає зберегти дані або закрити з’єднання | Спочатку kill <PID>, чекайте 5 сек, потім -9 |
Ігнорування df до 100% заповнення | Бази даних можуть пошкодитися при спробі запису на повний диск | Перевіряйте df -h регулярно або налаштуйте алерт на 80% |
| Випадкове натискання Ctrl+C на важливому довгому процесі | Процес вмирає і роботу треба починати з нуля | Використовуйте nohup або tmux для довгих завдань |
| Робота під root без потреби | Один невірний rm -rf / (наприклад, зайвий пробіл) знищить систему | Використовуйте sudo тільки для конкретних команд |
Тест
Розділ «Тест»-
Яка різниця між
psтаtop?Відповідь
`ps` — це статичний знімок (фотографія) на момент запуску команди. `top` — це динамічний дашборд, який оновлюється наживо. -
Ви ввели
kill 5678, але процес не зникає. Що робити?Відповідь
Надіслати жорсткий сигнал завершення: `kill -9 5678`. Цей сигнал обробляється ядром, і процес не може його проігнорувати. -
Як знайти, яка папка в
/varзаймає найбільше місця?Відповідь
`du -sh /var/* 2>/dev/null | sort -rh | head -5`. Це покаже 5 найбільших підпапок у `/var`. -
Що станеться, якщо натиснути Ctrl+Z під час роботи команди?
Відповідь
Команда не завершиться, а стане на паузу (Stopped). Її можна буде продовжити в фоні командою `bg` або повернути на передній план через `fg`.
Практична вправа: Полювання на процеси
Розділ «Практична вправа: Полювання на процеси»Завдання: Навчіться керувати життєвим циклом програми та моніторити ресурси.
- Запустіть “нескінченну” програму в фоні:
Terminal window sleep 1000 & - Знайдіть її PID за допомогою
psтаgrep:Terminal window ps aux | grep sleep - Подивіться на неї в
top(натиснітьqдля виходу):Terminal window top - Вбийте цей процес ввічливо:
Terminal window kill <ваш_PID> - Перевірте вільне місце на дисках:
Terminal window df -h - Знайдіть 3 найбільші папки у вашому домашньому каталозі:
Terminal window du -sh ~/* 2>/dev/null | sort -rh | head -3
Критерії успіху: Ви вмієте запускати процеси у фоні, знаходити їх за назвою та безпечно зупиняти.
Наступний модуль
Розділ «Наступний модуль»Ви вже вмієте вбивати процеси й знаходити зникле місце на диску. Але хто керує сервісами, які запускаються самі при старті системи — вашими вебсерверами чи базами даних? Час дізнатися про систему, що оркеструє все.