Як контролювати процесор і пам’ять у Linux?

Дізнайтеся, як відстежувати споживання ресурсів процесора та пам’яті окремими процесами або всією системою.

Системні адміністратори часто стикаються з ситуаціями, коли програми працюють повільно або не відповідають через високе навантаження на процесор, пам’ять або мережу. Якщо на сервері запущено лише один процес, легко визначити, коли він використовує всі доступні ресурси. Однак, у випадку спільного сервера, де працює кілька служб, виникає потреба виявити, яка саме служба створює навантаження.

Існує чимало готових програмних засобів для моніторингу, але якщо у вас їх немає або ви шукаєте рішення на основі команд, ця інформація буде корисною. Усі згадані інструменти є БЕЗКОШТОВНИМИ!

top

Для початку, ви можете скористатися утилітою top або htop, щоб отримати загальну картину запущених процесів.

Як показано нижче, це надає чітке уявлення про споживання ресурсів усіма процесами. Наприклад, процес MySQL використовує 11,9% процесора та 2,5% пам’яті.

top - 11:57:33 up 0 min,  1 user,  load average: 3.69, 0.96, 0.32
Tasks: 165 total,   2 running, 113 sleeping,   0 stopped,   0 zombie
%Cpu(s): 21.0 us,  5.5 sy,  0.0 ni, 70.5 id,  1.7 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem :  7637308 total,  5802888 free,   849512 used,   984908 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6495648 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 1986 netdata   20   0 1738856 191560  22948 S  11.6  2.5   0:02.30 mysqld                                                                                                         
 3021 www-data  20   0  255288  78420  55484 S   6.6  1.0   0:01.55 php-fpm                                                                                                        
 3138 www-data  20   0  253096  79780  59228 S   6.6  1.0   0:00.92 php-fpm                                                                                                        
 3153 www-data  20   0  255116  79088  56472 S   5.0  1.0   0:00.70 php-fpm                                                                                                        
 3037 www-data  20   0  257200  81088  56216 S   4.3  1.1   0:01.50 php-fpm                                                                                                        
 3048 www-data  20   0  257088  78740  55380 S   4.3  1.0   0:01.46 php-fpm                                                                                                        
 3054 www-data  20   0  254160  72168  52108 S   3.7  0.9   0:01.32 php-fpm                                                                                                        
 3135 www-data  20   0  255084  75912  54836 S   3.7  1.0   0:00.91 php-fpm                                                                                                        
 3051 www-data  20   0  254096  73804  51964 S   3.0  1.0   0:01.38 php-fpm                                                                                                        
 2962 www-data  20   0   45280   7284   3488 R   2.0  0.1   0:00.22 openresty                                                                                                      
 1062 netdata   20   0  338748  76144   6720 S   1.0  1.0   0:01.31 netdata                                                                                                        
 1702 netdata   20   0   21852   4232   2352 S   1.0  0.1   0:00.34 apps.plugin                                                                                                    
 1729 netdata   20   0   18636   3280   2764 S   0.7  0.0   0:00.05 bash                                                                                                           
 1980 netdata   20   0   62008  12896   5796 S   0.7  0.2   0:00.14 redis-server                                                                                                   
   11 root      20   0       0      0      0 I   0.3  0.0   0:00.14 rcu_sched                                                                                                      
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:00.92 dockerd                                                                                                        
 1857 root      20   0   10600   5564   4276 S   0.3  0.1   0:00.03 containerd-shim                                                                                                
 2045 root      20   0    9948   6028   5016 S   0.3  0.1   0:00.14 forego                                                                                                         
 2934 root      20   0   13616   8760   5928 S   0.3  0.1   0:00.07 docker-gen                                                                                                     
 2966 systemd+  20   0   25784   7924   2340 S   0.3  0.1   0:00.06 nginx

Top встановлено майже на всіх дистрибутивах Linux.

Визначивши підозрілий процес, ви можете зосередитись на ньому, а не на всіх процесах. Для цього можна скористатись командою top з певним аргументом.

Наприклад, якщо ви знаєте ідентифікатор процесу (PID), можете використати наступну команду:

top -p $PID

Наприклад, top -p 3102

top - 11:59:56 up 3 min,  1 user,  load average: 0.72, 0.70, 0.31
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  7.1 us,  2.9 sy,  0.0 ni, 89.1 id,  0.3 wa,  0.0 hi,  0.7 si,  0.0 st
KiB Mem :  7637308 total,  5802024 free,   783672 used,  1051612 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  6555636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                        
 3102 www-data  20   0  329500  82376  60640 S   0.0  1.1   0:03.35 php-fpm

Також можна використовувати grep з top. Наприклад, для перевірки використання Docker:

[email protected]:~# top | grep docker
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.38 dockerd                                                                                                        
 2934 root      20   0   14676   9652   5928 S   0.3  0.1   0:00.54 docker-gen                                                                                                     
 1007 root      20   0 1347424  74524  38872 S   0.3  1.0   0:01.39 dockerd                                                                                                        
 1007 root      20   0 1347424  74524  38872 S   1.0  1.0   0:01.42 dockerd                                                                                                        
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.55 docker-gen                                                                                                     
 2934 root      20   0   14740   9652   5928 S   0.3  0.1   0:00.56 docker-gen

htop

Htop подібний до top, але має додаткові можливості. Зокрема, він надає колонку з командою, що полегшує ідентифікацію шляху до процесу, а також має кольоровий інтерфейс.

htop може не бути встановлений за замовчуванням, але ви завжди можете його встановити, використовуючи наведені нижче команди.

Встановлення htop на Ubuntu

apt-get install htop

Встановлення htop на CentOS/RHEL 8.x

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf update
dnf install htop

glances

Як випливає з назви, glances дозволяє отримати швидкий огляд використання ресурсів системи на одному екрані. Процеси сортуються за рівнем споживання процесора.

Ви можете встановити glances на CentOS 8 за допомогою DNF:

dnf install glances

Для CentOS 7 використовуйте YUM:

yum install glances

atop

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

Щоб записати результат у файл:

atop -w filename

Для відтворення:

atop -r filename

Інструмент підтримує різні аргументи, такі як інтервал, кількість зразків тощо. Рекомендується переглянути довідкову сторінку.

Для моніторингу в реальному часі просто виконайте команду atop, як показано нижче.

Встановлення atop:

dnf install atop

ps

Розглянемо тепер команду ps.

Ви можете використовувати ps з PID, щоб отримати інформацію про використання процесора та пам’яті конкретного процесу.

ps -p $PID -o %cpu,%mem

Вихід повинен виглядати так:

[email protected]:~# ps -p 1048 -o %cpu,%mem
%CPU %MEM
 0.2  3.0
[email protected]:~#

nmon

Nmon – інтерактивний інструмент командного рядка для моніторингу використання процесора, пам’яті, дисків, мережі, NFS та віртуальної пам’яті. Щоб переглянути процеси, відсортовані за використанням ресурсів, запустіть nmon і натисніть клавішу t.

Встановлення nmon:

dnf install nmon

Monit

Monit – це веб-рішення з відкритим вихідним кодом для керування ресурсами сервера, демонами, файлами, каталогами, файловими системами тощо.

Monit також має зручний віджет.

Це легке програмне забезпечення для моніторингу з великим потенціалом для дослідження.

Monitorix

Monitorix – проста утиліта з відкритим вихідним кодом для моніторингу Linux-серверів. Monitorix має вбудований HTTP-сервер, що дозволяє переглядати використання ресурсів та іншу інформацію через веб-інтерфейс. Інші звіти про використання включають:

  • Ядро/температура
  • Файлова система та ввід/вивід
  • Мережевий трафік
  • Apache/Пошта/FTP/Nginx
  • MySQL/Varnish/Memcached

Monitorix також пропонує налаштування сповіщень, що дозволяє отримувати повідомлення про проблеми. Це хороший вибір для управління хмарними серверами, де важливий проактивний моніторинг.

Netdata

Netdata – це інструмент моніторингу продуктивності системних ресурсів, програм, веб-серверів, баз даних, DNS, пошти, апаратних датчиків та багатьох інших компонентів в реальному часі. Це програмне забезпечення з відкритим вихідним кодом, яке легко налаштувати. Дані збираються, зберігаються та відображаються для інтерактивної візуалізації. Збір даних відбувається щосекунди, тому ви не пропустите важливі події.

Інструмент має хорошу репутацію серед лідерів галузі.

Не зволікайте, спробуйте взяти під контроль свої Linux-сервери.

btop

btop – це зручний та повністю інтерактивний монітор ресурсів з гарним користувацьким інтерфейсом, що допомагає керувати Linux-серверами.

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

Крім того, ви можете перевіряти швидкість диска та стан вводу/виводу.

btop доступний для Linux, FreeBSD і macOS.

Висновок

Сподіваюсь, наведені інструменти допоможуть вам візуалізувати використання ресурсів сервера в реальному часі, щоб ви могли вчасно вжити необхідних заходів. Якщо ви тільки починаєте кар’єру системного адміністратора і хочете отримати практичні навички, рекомендую вам переглянути цей Курс Udemy.