6.4.5 Як перевірити що створює навантаження на сервері Unix
Зверніть увагу: стаття спрямована передусім на власників віртуальних та виділених серверів, з правами адміністратора (root).
Визначаємо, що створює навантаження на сервери з операційною системою Linux
Для того, щоб розпочати діагностику, спершу потрібно підключитися до сервера за допомогою протоколу SSH. Діагностика навантаження на сервері Linux передбачає аналіз різних параметрів та ресурсів системи.
Основні критерії діагностики: включають аналіз середньої навантаження на процесор та пам’ять, оцінку введення-виведення (I/O) та інформацію про активні процеси. Ці параметри дозволяють ефективно виявляти проблеми та оптимізувати ресурси для найкращої продуктивності сервера.
Розглянемо детальніше:
1. Використання процесора (CPU):
- Перевірка процентного використання CPU з використанням утиліт
top
,htop
,atop
. - Визначення, які процеси споживають найбільше CPU.
2. Використання пам’яті (RAM):
- Аналіз використання оперативної пам’яті за допомогою команди
free
або утилітtop
,htop
,atop
. - Визначення процесів, що займають багато пам’яті.
3. Використання дискового простору (Disk I/O):
- Аналіз активності диска за допомогою інструментів iotop та iostat.
- Виявлення процесів, які створюють високе навантаження на диск.
4. Використання мережі (Network I/O):
- Спостереження за мережевим трафіком за допомогою інструментів, таких як
iftop
,nload
або інших утиліт мережевого моніторингу. - Визначення процесів, що генерують високий мережевий трафік.
5. Журнали та логи системи:
- Перегляд системних журналів (
/var/log/messages
,/var/log/syslog
) на предмет наявності помилок або попереджень. - Аналіз виводу журналу подій системи (
journalctl
).
Діагностика навантаження за допомогою утиліти top
Утиліта top в Linux надає ефективний засіб моніторингу та діагностики навантаження на систему в режимі реального часу. Розглянемо основні компоненти її інтерфейсу, які допомагають оперативно виявляти проблеми та оптимізувати використання ресурсів.
Інтерфейс утиліти top розділений на дві основні частини:
Верхня частина: моніторинг поточного навантаження на систему, включає такі показники
1. Середня завантаженість (Load Average):
-
Три значення для останніх 1, 5 та 15 хвилин. Високі значення можуть свідчити про перевантаження системи.
-
Нормальним навантаженням вважається значення, що менше або дорівнює кількості ядер.
-
Перевірити кількість процесорних ядер на сервері можна за допомогою утиліти
nproc
- root@os ~ # nproc
- 2
2. Використання процесора (CPU):
Рядок CPU вказує, наскільки активно використовується процесор. Усі значення вимірюються у відсотках і дозволяють оцінити, скільки часу процесор витрачає на різні види завдань. Рядок має наступні параметри:
Назва: | Значення: |
---|---|
%Cpu(s) | Загальний відсоток часу, протягом якого процесор зайнятий виконанням різних завдань. |
us (User) | Відсоток часу, протягом якого процесор витрачає на виконання завдань від користувача, наприклад, додатків. |
sy (System) | Відсоток часу, протягом якого процесор витрачає на виконання системних завдань, пов’язаних з ядром операційної системи. |
ni (Nice) | Відсоток часу, протягом якого процесор виконує завдання з зменшеним пріоритетом (nice). |
id (Idle) | Відсоток часу, протягом якого процесор простоїть і не виконує жодних завдань. |
wa (Wait) | Відсоток часу, протягом якого процесор очікує завершення операцій введення-виведення (I/O). |
hi (Hardware Interrupts) | Відсоток часу, протягом якого процесор обробляє апаратні переривання. |
si (Software Interrupts) | Відсоток часу, протягом якого процесор обробляє програмні переривання. |
st (Steal Time) | Відсоток часу, протягом якого віртуальна машина втрачає доступ до процесору через дії інших віртуальних машин. |
3. Використання пам’яті (Memory):
Рядок із використанням пам’яті містить інформацію про поточний стан оперативної пам’яті (RAM). У рядку містяться наступні поля:
Назва: | Значення: |
---|---|
total | Загальний обсяг оперативної пам’яті в системі. |
used | Кількість використаної оперативної пам’яті. |
free | Кількість вільної оперативної пам’яті, доступної для використання. |
shared | Кількість пам’яті, використованої спільними (shared) процесами. |
buff/cache | Сума пам’яті, використаної для буферів і кешу. Буфери зберігають дані перед їх записом на диск, а кеш містить закешовані дані для прискорення доступу. |
available | Загальна кількість пам’яті, доступна для нових процесів без використання підкачування. |
Значення вимірюються у кілобайтах (KB), мегабайтах (MB) або гігабайтах (GB), залежно від поточного завантаження пам’яті в системі. Інформація у цьому рядку допомагає оцінити, наскільки ефективно використовується оперативна пам’ять і чи є потреба в додаткових ресурсах.
Нижня частина: включає в себе таблицю, яка містить детальну інформацію про поточні процеси, які запущені в системі, зокрема
В кожному рядку таблиці містяться такі поля:
Назва: | Значення: |
---|---|
PID (Ідентифікатор процесу) | Унікальний числовий ідентифікатор для кожного процесу. За цим ідентифікатором можна однозначно ідентифікувати процес. |
USER (Користувач) | Ім’я користувача, від імені якого запущений процес. Це дозволяє визначити, хто є власником процесу. |
PR (Пріоритет) | Пріоритет процесу. Чим нижче значення, тим вищий пріоритет. Наприклад, 20 - найнижчий пріоритет, -20 - найвищий. |
NI (Nice) | Пріоритет процесу у вигляді “nice”-значення. Це число, яке показує, наскільки “доброзичливим” є процес. Значення позитивні або негативні впливають на пріоритет. |
VIRT (Віртуальна пам’ять) | Загальний обсяг віртуальної пам’яті, якою користується процес. |
RES (Фізична пам’ять) | Кількість фізичної пам’яті, якою користується процес. |
SHR (Загальна пам’ять) | Об’єм пам’яті, що є спільною між кількома процесами. |
S (Статус) | Поточний статус процесу. Наприклад, “R” означає, що процес виконується (running), “S” - у режимі очікування (sleeping). |
%CPU (Використання CPU) | Відсоток використання CPU даним процесом. |
%MEM (Використання пам’яті) | Відсоток використання оперативної пам’яті процесом. |
TIME+ (Час CPU) | Загальна кількість часу процесора, витраченого на виконання процесу. |
COMMAND (Команда) | Команда або виконуваний файл, який запущений процесом. |
Доступні різні комбінації клавіш для управління таблицею процесів, ось найбільш необхідні:
Команда: | Описание: |
---|---|
k (Kill) |
Закрити (завершити) обраний процес. Введіть PID процесу та натисніть Enter. |
r (Renice) |
Змінити пріоритет (nice value) обраного процесу. Введіть PID та новий пріоритет, потім натисніть Enter. |
u (User Filter) |
Показати лише процеси, запущені певним користувачем. Введіть ім’я користувача та натисніть Enter. |
M (Sort by Memory Usage) |
Сортувати процеси за використанням пам’яті (у зменшенні)… |
P (Sort by CPU Usage) |
Сортувати процеси за використанням CPU (у зменшенні). |
F (Choose Fields) |
Вибір відображуваних полів у таблиці процесів. |
Space (Toggle Process Selection) |
Вибір/скасування вибору для одного чи декількох процесів. |
Enter (Select Field for Sorting) |
Вибір поля для сортування процесів. |
W (Write Configuration to File) |
Збереження поточної конфігурації в файл для подальшого використання. |
q (Quit) |
Вийти з утиліти top. |
Перевірка навантаження за допомогою atop
Утиліта atop у Linux надає докладну інформацію про навантаження на систему та ресурси у реальному часі. Розглянемо основні компоненти її інтерфейсу, які допомагають оперативно виявити проблеми та оптимізувати використання ресурсів.
Інтерфейс утиліти atop розділений на кілька розділів, які надають інформацію про навантаження на систему:
Верхня частина: загальна інформація про навантаження на систему
Назва: | Значення: |
---|---|
Час та тривалість роботи | Показує поточний час та тривалість роботи системи. |
Кількість користувачів | Показує кількість активних користувачів у системі. |
Навантаження на систему | Відображає поточне навантаження на систему, включаючи середнє навантаження процесора та кількість процесів. |
Статистика по процесору | Надає інформацію про навантаження кожного ядра процесора. |
Статистика по пам’яті | Відображає використання оперативної пам’яті та простору підкачки. |
Статистика по диску | Показує активність дискової підсистеми. |
Статистика по мережі | Відображає мережеву активність, включаючи кількість переданих та отриманих байтів даних. |
Статистика по введенню/виведенню | Надає інформацію про введення/виведення даних на дискові пристрої. |
Статистика по мережевим з’єднанням | Відображає активні мережеві з’єднання та їх характеристики, такі як IP-адреси та використані порти. |
Нижня частина: містить докладну інформацію про процеси, що працюють у системі
Найменування: | Значення: |
---|---|
Список процесів | Надає список всіх процесів у системі з їх характеристиками, такими як ідентифікатор процесу, ім’я користувача, використання CPU та пам’яті, статус тощо. |
Команди управління | Надає доступ до команд управління таблицею процесів, таких як вбивство процесу, зміна пріоритету, сортування та фільтрація процесів. |
Утиліта дає можливість перегляду логів за сьогодні, для цього наберіть:
- atop -r
Корисні клавіші:
t
- перейти вперед за часом.Shift + t
- перейти назад за часом.
Для перегляду історії навантаження на систему за попередні дні, можна використовувати параметр -r
(режим відтворення) у поєднанні із зазначенням конкретної дати.
- atop -r YYYYMMDD
Де YYYYMMDD
- це дата у форматі РРРРММДД, яка є день, за який Ви хочете переглянути історію навантаження. Наприклад, 20240405 на 5 квітня 2024 року.
- atop -r /var/log/atop/atop_20240405
- Використовуйте клавіші зі стрілками вгору та вниз, щоб переглянути дані вгору та вниз по екрану.
- Для переміщення по часу вперед-назад, використовуйте клавіші
t
таShift+t
. - Для прогортання даних швидше або повільніше можна використовувати клавіші зі стрілками вліво і вправо.
- Щоб вийти з режиму відтворення, натисніть клавішу
q
.
Додатково: перелік доступних комбінацій клавіш
q
- вихід з утиліти atop.r
- Зміна режиму сортування процесів (за CPU, пам’яті та іншим критеріям).b
- Перемикання між режимами сортування (за спаданням або зростанням).s
- Зміна інтервалу між оновленнями екрана (збільшення або зменшення).i
- Увімкнення або вимкнення інтерактивного режиму (пошук та фільтрація).n
- Перемикання між режимами відображення мережної активності (байти або пакети).m
- Перемикання між режимами відображення використання пам’яті (різні метрики).p
- Перемикання між режимами відображення завантаження процесора (все, тільки системні або користувальницькі процеси).j
- Переключення між режимами відображення керування I/O (все, тільки читання або запис).o
- Увімкнення або вимкнення режиму відображення відкладених записів (writeback).x
- Увімкнення або вимкнення режиму відображення процесів з високим пріоритетом (RT).L
- Увімкнення або вимкнення режиму відображення заблокованих процесів.C
- Увімкнення або вимкнення режиму відображення команд процесів.A
- Перемикання між режимами відображення всіх або активних процесів.I
- Увімкнення або вимкнення режиму відображення системних ідентифікаторів процесів.N
- Переключення між режимами відображення номерів портів або імен сервісів для активності мережі.W
- Збереження поточних налаштувань atop у файл.?
- Виведення довідки за комбінаціями клавіш.
Діагностика навантаження за допомогою htop
Утиліта htop - це інтерактивний інструмент моніторингу для реального часу діагностики системи на операційних системах Linux. Вона забезпечує зручний та інтерактивний спосіб використання для діагностики системи, у порівнянні з класичною утилітою top, і може бути корисним інструментом для системних адміністраторів та розробників.
Інтерфейс утиліти htop розділений на дві основні частини:
Верхня частина: моніторинг навантаження на систему в реальному часі, розглянемо кожен елемент
Назва: | Значення: |
---|---|
Загальна навантаженість | Три значення для останніх 1, 5 та 15 хвилин. Високі значення можуть свідчити про перевантаження системи. |
Кількість ядер | Кількість фізичних та логічних ядер процесора. |
Використання CPU | Графічне відображення активності кожного ядра процесора. |
Використання пам’яті | Графічна індикація використання оперативної пам’яті. |
Список опцій та команд | Інформація щодо доступних клавіш для керування та взаємодії з утилітою. |
Заголовок колонок | Пояснення значень у верхньому рядку таблиці процесів. |
Нижня частина: містить таблицю, в якій відображається інформація про процеси
Назва: | Значення: |
---|---|
PID (Ідентифікатор Процесу) | Унікальний номер, що ідентифікує процес. |
USER (Користувач) | Ім’я користувача, від імені якого запущений процес. |
PR (Пріоритет) | Пріоритет процесу. |
NI (Nice) | Пріоритет процесу у вигляді “nice”-значення. Це число показує, наскільки “доброзичливим” є процес. Значення можуть бути позитивні або від’ємні та впливають на пріоритет. |
VIRT (Віртуальна пам’ять) | Загальний об’єм віртуальної пам’яті, яку використовує процес. |
RES (Фізична пам’ять) | Кількість фізичної пам’яті, яку використовує процес. |
SHR (Загальна пам’ять) | Об’єм пам’яті, яка спільно використовується між декількома процесами. |
S (Статус) | Поточний статус процесу (наприклад, виконується, у режимі очікування). |
%CPU (Використання CPU) | Відсоток використання CPU цим процесом. |
%MEM (Використання пам’яті) | Відсоток використання оперативної пам’яті цим процесом. |
TIME+ (Час CPU) | Загальна кількість часу процесора, витраченого на виконання процесу. |
COMMAND (Команда) | Команда або виконуваний файл, запущений процесом. |
Діагностика навантаження на процесор за допомогою утиліти ps
Для моніторингу навантаження на процесор Ви можете використовувати утиліту ps. Ця утиліта надає багато інформації про запущені процеси в операційній системі Linux. Один із способів відстеження навантаження на процесор - використання комбінації параметрів, включаючи сортування за використанням CPU.
- ps -aux --sort -pcpu
Розглянемо, як її можна використовувати для моніторингу та аналізу активності процесів.
Після виконання команди Ви отримаєте список процесів, відсортованих за використанням CPU в порядку зменшення. Кожен рядок містить інформацію про конкретний процес.
Детальніше: що відображає кожна колонка утиліти
Назва: | Значення: |
---|---|
USER | Ім’я користувача. |
PID | Ідентифікатор процесу. |
%CPU | Відсоток використання процесора. |
%MEM | Відсоток використання пам’яті. |
VSZ | Розмір віртуальної пам’яті. |
RSS | Резидентний розмір (фізична пам’ять). |
TTY | Термінал, з якого запущений процес. |
STAT | Статус процесу. |
START | Час запуску. |
TIME | Загальний час виконристання процесора. |
COMMAND | Команда або виконуваний файл, запущений процесом. |
Під час перегляду результатів, звертайте увагу на процеси, які розташовані у верхній частині списку. Якщо помічаєте які-небудь підозрілі процеси, Ви можете завершити їх, використовуючи команду:
- kill PID
- kill -9 PID
Командою kill
можна зупинити конкретний процес, вказавши його PID. Команда killall -9 apache2
припинить всі процеси Apache на сервері.
Команда killall -u user
завершить всі процеси користувача user.
Опція
-9
відправляє сигнал, який негайно припиняє виконання процесу, але при цьому не надає йому можливість завершити свою роботу належним чином. Будьте обережні при використанні -9, оскільки це може призвести до втрати даних або некоректного завершення процесу.
Діагностика навантаження на веб-сервер Nginx
Якщо на сервері встановлено веб-сервер Nginx, використовуючи наступну команду, можна вивести список сайтів, на які надійшло найбільше запитів:
- tail -n 10000 /var/log/nginx/access.log | awk '{print $6}' | sort -n | uniq -c | sort -nr | head -n10
Наступна команда виведе список IP-адрес, з яких надійшло найбільше запитів:
- tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -n10
Наступною командою можна заблокувати доступ до серверу для IP-адреси 1.1.1.1.
- iptables -I INPUT -s 1.1.1.1 -j REJECT
Для видалення правила блокування, змініть ключ -I
на -D
.