6.3.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
Візуальний інтерфейс утиліти top

Інтерфейс утиліти top розділений на дві основні частини:

Верхня частина: моніторинг поточного навантаження на систему, включає такі показники

1. Середня завантаженість (Load Average):

  • Три значення для останніх 1, 5 та 15 хвилин. Високі значення можуть свідчити про перевантаження системи. Відображення середнього навантаження на процесор

  • Нормальним навантаженням вважається значення, що менше або дорівнює кількості ядер.

  • Перевірити кількість процесорних ядер на сервері можна за допомогою утиліти nproc

  1. root@os ~ # nproc
  2. 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), залежно від поточного завантаження пам’яті в системі. Інформація у цьому рядку допомагає оцінити, наскільки ефективно використовується оперативна пам’ять і чи є потреба в додаткових ресурсах.

Нижня частина: включає в себе таблицю, яка містить детальну інформацію про поточні процеси, які запущені в системі, зокрема

Графічне відображення таблиці процессів утиліти top

В кожному рядку таблиці містяться такі поля:

Назва: Значення:
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.

Діагностика навантаження за допомогою утиліти htop

Утиліта htop - це інтерактивний інструмент моніторингу для реального часу діагностики системи на операційних системах Linux. Вона забезпечує зручний та інтерактивний спосіб використання для діагностики системи, у порівнянні з класичною утилітою top, і може бути корисним інструментом для системних адміністраторів та розробників.

Графічне відображення утиліти htop
Візуальне відображення утиліти htop

Інтерфейс утиліти htop розділений на дві основні частини:

Верхня частина: моніторинг навантаження на систему в реальному часі, розглянемо кожен елемент

Графічне відображення верхньої частини утиліти htop

Назва: Значення:
Загальна навантаженість Три значення для останніх 1, 5 та 15 хвилин. Високі значення можуть свідчити про перевантаження системи.
Кількість ядер Кількість фізичних та логічних ядер процесора.
Використання CPU Графічне відображення активності кожного ядра процесора.
Використання пам’яті Графічна індикація використання оперативної пам’яті.
Список опцій та команд Інформація щодо доступних клавіш для керування та взаємодії з утилітою.
Заголовок колонок Пояснення значень у верхньому рядку таблиці процесів.
Нижня частина: містить таблицю, в якій відображається інформація про процеси

Графічне відображення нижньої частини утиліти htop

Назва: Значення:
PID (Ідентифікатор Процесу) Унікальний номер, що ідентифікує процес.
USER (Користувач) Ім’я користувача, від імені якого запущений процес.
PR (Пріоритет) Пріоритет процесу.
NI (Nice) Пріоритет процесу у вигляді “nice”-значення. Це число показує, наскільки “доброзичливим” є процес. Значення можуть бути позитивні або від’ємні та впливають на пріоритет.
VIRT (Віртуальна пам’ять) Загальний об’єм віртуальної пам’яті, яку використовує процес.
RES (Фізична пам’ять) Кількість фізичної пам’яті, яку використовує процес.
SHR (Загальна пам’ять) Об’єм пам’яті, яка спільно використовується між декількома процесами.
S (Статус) Поточний статус процесу (наприклад, виконується, у режимі очікування).
%CPU (Використання CPU) Відсоток використання CPU цим процесом.
%MEM (Використання пам’яті) Відсоток використання оперативної пам’яті цим процесом.
TIME+ (Час CPU) Загальна кількість часу процесора, витраченого на виконання процесу.
COMMAND (Команда) Команда або виконуваний файл, запущений процесом.

Діагностика навантаження на процесор за допомогою утиліти ps

Для моніторингу навантаження на процесор Ви можете використовувати утиліту ps. Ця утиліта надає багато інформації про запущені процеси в операційній системі Linux. Один із способів відстеження навантаження на процесор - використання комбінації параметрів, включаючи сортування за використанням CPU.

  1. ps -aux --sort -pcpu

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

Після виконання команди Ви отримаєте список процесів, відсортованих за використанням CPU в порядку зменшення. Кожен рядок містить інформацію про конкретний процес.

Графічне відображення нижньої частини утиліти ps
Візуальне відображення виконання команди ps
Детальніше: що відображає кожна колонка утиліти
Назва: Значення:
USER Ім’я користувача.
PID Ідентифікатор процесу.
%CPU Відсоток використання процесора.
%MEM Відсоток використання пам’яті.
VSZ Розмір віртуальної пам’яті.
RSS Резидентний розмір (фізична пам’ять).
TTY Термінал, з якого запущений процес.
STAT Статус процесу.
START Час запуску.
TIME Загальний час виконристання процесора.
COMMAND Команда або виконуваний файл, запущений процесом.

Під час перегляду результатів, звертайте увагу на процеси, які розташовані у верхній частині списку. Якщо помічаєте які-небудь підозрілі процеси, Ви можете завершити їх, використовуючи команду:

  1. kill PID
  1. kill -9 PID

Командою kill можна зупинити конкретний процес, вказавши його PID. Команда killall -9 apache2 припинить всі процеси Apache на сервері. Команда killall -u user завершить всі процеси користувача user.

Опція -9 відправляє сигнал, який негайно припиняє виконання процесу, але при цьому не надає йому можливість завершити свою роботу належним чином. Будьте обережні при використанні -9, оскільки це може призвести до втрати даних або некоректного завершення процесу.

Діагностика навантаження на веб-сервер Nginx

Якщо на сервері встановлено веб-сервер Nginx, використовуючи наступну команду, можна вивести список сайтів, на які надійшло найбільше запитів:

  1. tail -n 10000 /var/log/nginx/access.log | awk '{print $6}' | sort -n | uniq -c | sort -nr | head -n10

Наступна команда виведе список IP-адрес, з яких надійшло найбільше запитів:

  1. tail -n 10000 /var/log/nginx/access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -n10

Наступною командою можна заблокувати доступ до серверу для IP-адреси 1.1.1.1.

  1. iptables -I INPUT -s 1.1.1.1 -j REJECT

Для видалення правила блокування, змініть ключ -I на -D.