Щоб сервер працював коректно, навантаження завжди має бути в межах норми. Програмне забезпечення при зростанні відвідуваності викликає велику нагнузку і важливо стежити за доступними ресурсами процесора і під час розширення сервера. Коли навантаження на сервері велике важливо вміти розібратися, що викликає навантаження, робити оптимізацію. Ми покажемо вам як можна перевірити навантаження.
Як перевірити навантаження на процесор на сервері за допомогою htop
Для початку ми повинні увійти на наш сервер та встановити "htop"
Debian/Ubuntu: apt install htop
CentOS/RHEL: yum -y install htop
Після встановлення запускаємо "htop" і дивимось які саме процеси у нас нагорі. Ми можемо “Вбити” процес. Перейдемо на нього за допомогою стрілочок "верх-вниз", натиснемо "F9", а потім "Enter". Після цього ми можемо знову запустити наше ПЗ і спостерігати за його роботою.
Як перевірити навантаження на процесор на сервері за допомогою "ps"
Також заходимо на сервер та виконуємо команду: "ps-aux -sort -pcpu" і дивимося який процес знаходиться на вершині. Він показує поточне навантаження у терміналі.
Нам важливо переглянути параметри:
"USER" – Який користувач запустив команду
"PID" – ID процесу
"%CPU" – Як сильно цей процес навантажує процесор
Щоб "вбити" процес, який створює навантаження на сервері, ми використовуємо команду:
kill -9 "PID"
Також завжди у Linux є штатна команда top. Сподіваємося, ця інформація була Вам корисна.
Щоб дізнатися чи вистачає потужності процесора вашому серверу або комп'ютеру, потрібно подивитися завантаження процесора в даний момент або останнім часом.Це значення показує скільки відсотків використовується обчислювальна потужність процесора.
У цій статті ми розглянемо кілька способів вирішення цього завдання за допомогою звичних системних утиліт та складніших інструментів.
Як подивитися завантаження процесора в Linux
1. Утиліта htop
Найпростіший спосіб дізнатися, наскільки процесор завантажений в даний момент – скористатися утилітою htop. Вона показує не лише відсоток завантаження по кожному ядру процесора окремо, а й дозволяє знайти процеси, які навантажують систему найбільше. Для встановлення htop у Debian або Ubuntu виконайте:
sudo apt install htop
sudo yum install htop
Головне вікно програми виглядає так:
Тут у верхній частині вікна виводиться завантаження ядер процесора як наочних шкал, а нижче процеси. В даному прикладі у процесора 12 ядер і кожне з них завантажено не більше, ніж на один відсоток.
2. Файл /proc/loadavg
Якщо треба зорієнтуватися яке було навантаження на процесор останнім часом, тут htop не допоможе. Можна скористатися файлом /proc/loadavg. Його створює ядро і містить інформацію про середнє навантаження за одну, п'ять і п'ятнадцять хвилин. Але зверніть увагу, дані, що знаходяться в цьому файлі, не такі однозначні. По-перше, це не відсотки, по-друге, вони відображають не навантаження на процесор, а навантаження на систему в цілому.
Перші три значення в цьому файлі означають середню кількість процесів або потоків, які виконуються, знаходяться в черзі на виконання або чекають на завершення операцій введення/виводу за 1, 5 і 15 хвилин. Ось:
Зазвичай, якщо значення більше одиниці – значить навантаження вже велике і треба розбиратися чому.Якщо значення за хвилину менше значень за п'ять і п'ятнадцять хвилин – навантаження падає, якщо більше – зростає. Таким чином, можна трохи зорієнтуватися наскільки завантажена ваша система. Ці значення можна використовувати для загального орієнтування або надсилання повідомлень на пошту, а для аналізу польотів вже застосовувати інші метрики та програми.
Четверте значення тут – це кількість процесів – виконуваних на даний момент, зазвичай відповідає кількості процесорів, наступне число через сліш – це загальна кількість таких процесів у системі. Останнє значення – PID останнього створеного процесу.
3. Утиліта mpstat
Утиліта mpstat дозволяє переглянути докладну статистику щодо використання процесора. Можна подивитися не тільки інформацію щодо кожного з ядер, але й куди використовуються ресурси – на введення/виведення, ядро або програми простору користувача. Для встановлення програми в Ubuntu або Debian виконайте:
sudo apt install sysstat
sudo yum install sysstat
Щоб переглянути загальну інформацію, виконайте таку команду:
А для перегляду подробиць кожного ядра процесора використовуйте опцію -P з параметром ALL:
Ось значення колонок у виведенні цієї програми:
- CPU – Номер ядра процесора;
- %usr – споживання програмами простору користувача;
- %nice – споживання ресурсів у відсотках програмами у просторі користувача з підвищеним пріоритетом;
- %sys – споживання ресурсів процесора ядром;
- %iowait – Витрати очікування вводу/вывода;
- %irq – ресурси, витрачені на переривання до роботи з апаратним забезпеченням;
- %soft – Ресурси, витрачені на програмні переривання;
- %steal – вкрадені процесорні ресурси, актуальні для віртуальних машин;
- %guest – ресурси, витрачені працювати віртуального процесора;
- %idle – Невикористані ресурси.
Як бачите, в даному випадку навантаження на процесор не досягає навіть трьох відсотків для деяких ядер.
4. Команда nmon
Утиліта nmon дозволяє виводити дані у вигляді, схожому на htop, але лише трохи докладніше. Для встановлення її в Ubuntu та Debian виконайте:
sudo apt install nmon
Для встановлення в CentOS або REHL:
sudo yum install nmon
Після запуску потрібно натиснути кнопку c щоб відобразити інформацію про навантаження на ядра процесора:
Тут, крім наочної шкали, по кожному ядру виводиться інформація у відсотках за такими показниками:
- User% – ресурси, витрачені програмами у просторі користувача;
- Sys% – ресурси, витрачені ядром;
- Wait% – ресурси, які йдуть на очікування на введення/виведення;
Тут вже можна зорієнтуватися, наскільки все завантажено і в чому проблема.
5. CoreFreq
Якщо всієї отриманої раніше інформації про продуктивність вам мало, можна скористатися утилітою CoreFreq. Її немає в офіційних репозиторіях, тож доведеться збирати програму із вихідників. Але вона має свій модуль ядра, який встановлює свої лічильники продуктивності в ядрі і повертає утиліті найбільш докладні дані. Спочатку встановіть потрібні компоненти. В Ubuntu:
sudo apt install dkms git libpthread-stubs0-dev
sudo yum group install 'Development Tools'
Потім скачайте репозиторій утиліти з GitHub та зберіть її:
git clone https://github.com/cyring/CoreFreq.git
Завантажте модуль ядра такою командою:
sudo insmod corefreqk.ko
Потім запускайте програму:
Вгорі програми відображається інформація про процесор, нижче шкали із завантаженістю кожного ядра, а її нижче різні показники по кожному ядру: частота – Freq, прискорення – Turbo, C0-C7 – значення станів процесора C-State. У цьому прикладі більшість ядер процесора працюють на мінімальній частоті і більшу частину часу перебувають у стані C1. Цей стан означає, що ядро не активне, але може будь-якої миті перейти до виконання інструкцій. Стан C0 означає, що ядро активно і виконує якісь дії.
За допомогою цієї утиліти ви зможете дізнатися максимально докладну інформацію про завантаження процесора і про процесор в цілому.
Висновки
У цій невеликій статті ми розглянули, як визначається завантаження процесора Linux за допомогою різних утиліт. Як системних, і сторонніх. А які утиліти для таких цілей ви використовуєте? Напишіть у коментарях!
З'ясовуємо, чому так важливо відстежувати навантаження на процесор сервера, а також розглянемо кілька популярних утиліт для моніторингу стану сервера та завантаженості CPU зокрема.
Що означає навантаження на процесор і навіщо його відстежувати?
Під навантаженням розуміється кількість ресурсів, яке «залізо» комп'ютера витрачає виконання однієї чи кількох завдань. Зазвичай воно відображається у відсотковому співвідношенні, де за 100% береться максимальне завантаження одного з ядер.
Спостереження за цим значенням потрібно, щоб уникнути проблем, пов'язаних із надлишковим навантаженням на чіп. Тому що процесор може бути зайнятий як корисними завданнями, так і тими, що заважають реалізувати потенціал пристрою повною мірою.
Наприклад, код деяких програм може бути погано оптимізований.У зв'язку з чим сервер витрачатиме більше потужностей на виконання за промовчанням простих завдань. Або ж на сервер може потрапити вірус, який відніматиме частину ресурсів.
Таке «непотрібне» завантаження чіпа призведе до загального зниження продуктивності сервера, а також додатків і сайтів, що базуються на ньому. А це призведе до втрати аудиторії та зниження прибутку.
Найкращі інструменти для відстеження навантаження на CPU сервера
Спостерігати за тим, скільки ресурсів чіпа витрачається в даний момент, можна декількома способами:
- за допомогою інструментів, що надаються хостинг-провайдером, у якого ви орендували сервер;
- за допомогою спеціальних текстових утиліт для Linux, що відображають статистичні дані про стан комп'ютера.
Ми розглянемо обидва варіанти, але ваш хостинг може не мати панелі зі статистикою. Тому я покажу таку панель на прикладі Timeweb, де вона точно є. Розбиратимемося на прикладі сервера з Linux на борту.
Подробиці про моніторинг стану сервера уточнюйте у свого провайдера.
Панель керування хостингом
Timeweb (як і деякі інші провайдери) надає статистичні дані щодо стану сервера в реальному часі. Панель керування VDS/VPS має окремий блок, в якому відображається графік з актуальним навантаженням на процесор.
Щоб отримати доступ до інформації про стан чіпа на панелі керування Timeweb:
- Заходимо на сторінку хостингу та вводимо дані для авторизації у ПУ.
- Відкриваємо список діючих VDS та переходимо до того, навантаження на який потрібно оцінити.
На головній сторінці з'явиться блок зі статистикою протягом дня. Там буде інформація і з процесора, і з інтернет-каналу.Все в блоці разом з основною інформацією про сервер (мається на увазі операційна система та обсяг вільного простору на диску).
Якщо перейти на вкладку Статистика, можна буде вказати тимчасовий відрізок, щоб переглянути рівень навантаження в ретроспективі (на момент збоїв або скарг відвідувачів). Також з'явиться доступ до блоку Оперативна пам'ять, де можна оцінити навантаження на ОЗУ.
Текстові утиліти для перевірки навантаження
Якщо доступу до панелі хостингу немає, дані про процесор можна підглянути в самій системі за допомогою спеціальних програм в терміналі Linux.
Тільки перед початком роботи з ними треба підключитися до сервера за допомогою SSH-протоколу.
У macOS та Linux це робиться через термінал. Відкриваємо командний рядок та вводимо до нього ssh root@адреса сервера. У Windows спочатку треба завантажити програму PuTTY, запустити її, знайти всередині поле IP-адреси, вказати в ньому адресу сервера, а потім натиснути ОК.
В обох випадках потрібно буде авторизуватись, використовуючи пароль адміністратора, а подальші команди виконувати через консоль SSH. Отже, варто ознайомитися з базовими принципами роботи терміналу Linux перед початком.
IP-адресу можна знайти в панелі управління провайдера або запитати у техпідтримки. А пароль хостинг надсилає на пошту відразу після оренди VDS/VPS.
top
Команда top виводить у термінал Linux інформацію про процесор сервера в реальному часі. Дані оновлюються кожні 5 секунд.
top показує рівень навантаження у відсотках (поле %CPU) для кожної запущеної програми.
Щоб вивести статистику на екран, треба ввести консоль top без додаткових вступних. З'явиться якийсь аналог менеджера завдань у текстовому вигляді.Але інформацію на екрані можна змінювати, використовуючи гарячі клавіші для керування утилітою:
- P — відсортує завдання, що виконуються за рівнем навантаження на CPU.
- M — відсортує процеси за рівнем ОЗУ, що витрачається.
- N – на ім'я запущених процесів.
- T — час виконання завдання з моменту останнього запуску.
- U – Покаже програми, запущені конкретним користувачем.
Висновок top можна спростити, видаливши з нього процеси, що простоюють. Так можна зосередити увагу лише на активних завданнях, які споживають ресурси у моменті. Для цього команду треба трохи ускладнити, додавши в кінці опцію -i.
iostat
Ще одна вбудована в Linux системна утиліта, що відображає статистичні показники заліза.
За промовчанням iostat відображає дані про роботу пристроїв введення та виведення, а також рівень завантаженості центрального процесора. Для аналізу беруться дані на момент запуску утиліти порівняно із середньостатистичними.
Щоб отримати дані конкретно про CPU, треба доповнити команду аргументом -c.
У звіті iostat рівень навантаження на чіп показується у відсотках кожної запущеної програми і ділиться на кілька категорій.
- user – процеси, запущені від імені користувача.
- nice – те саме, тільки зі зміненим пріоритетом.
- system – процеси, безпосередньо пов'язані з операційною системою.
- idle – час у простій.
Команду можна модифікувати, вказавши додаткові опції, що коригують виведення консоль.
Можна додати інтервал, прописавши в кінці кількість разів, яку iostat повинен вивести звіт, та періодичність цієї операції. Також можна змінити формат відображення ресурсів, що витрачаються, або показати розширену статистику.
vmstat
За замовчуванням ця команда Linux виводить у консоль інформацію про стан віртуальної пам'яті.Але через неї можна знайти дані і про інші компоненти операційної системи. Ступінь завантаженості CPU серед них.
vmstat як і top по черзі оновлює дані. Інтервал оновлення залежить від зазначених опцій. Наприклад, щоб отримувати свіжий звіт vmstat кожні 5 секунд, треба ввести в термінал команду vmstat 5. Додавши ще одну цифру, можна зазначити кількість звітів.
Висновок утиліти містить кілька колонок. Останні 5 відображають інформацію про процесор (обведені в графу CPU):
- us – відсоток навантаження з боку несистемних завдань, тобто тих, що запустив користувач.
- sy – системне навантаження на рівні ядра.
- id – час, який процесор проводить в очікуванні, не виконуючи жодних завдань.
- wa — час, витрачений чіпом на очікування на введення або виведення даних.
- st – відсоток навантаження з боку віртуальної машини.
Сторонні текстові утиліти
Вбудовані програми для аналізу системи покривають базові вимоги вебмайстрів, але можуть виявитися недостатньо ефективними для тих, кому потрібна розширена статистика та додаткова функціональність.
Добре незалежні розробники створили з десяток інструментів для збору статистики навантаження на процесор сервера. Більшість їх так само, як і вбудовані програми для моніторингу, представлена у вигляді текстових утиліт, що запускаються через термінал. Щоправда, перед використанням їх потрібно завантажити із підключених до системи репозиторіїв.
Для цього потрібно запустити менеджер пакетів, ввівши відповідну команду. Наприклад, для встановлення пакета nmon потрібно ввести:
У дистрибутиві Ubuntu/Debian
sudo apt get install nmon
У дистрибутиві Fedora
sudo dnf install nmon
У дистрибутиві Arch Linux
У дистрибутиві CentOS/RedHat Linux
htop
Команда для встановлення: sudo назва менеджера пакетів install nmon
У команди top є свого роду старший брат htop. Це модифікація вбудованої в Linux утиліти з розширеною функціональністю, статистикою, що налаштовується, і більш наочним інтерфейсом.
Показники, що відображаються в htop, піддаються тонкому настроюванню з боку клієнта. Можна видалити зайві дані, залишивши тільки навантаження CPU, а можна навпаки додати більше показників, якщо стандартних не вистачає.
Зовнішній вигляд htop можна адаптувати під свої смакові уподобання. Виділити кольором запущені процеси в залежності від того, який додаток відповідає за їхню роботу, або просто розфарбувати показники заради естетики.
Вікно htop підтримує роботу в чотирьохколоночному режимі. У кожній колонці можна відобразити статистику кожного з ядер, встановлених на вашому VDS. Аж до 128 ядер на одному екрані з можливістю зручно відстежувати навантаження на всі активні CPU.
nmon
Команда для встановлення: sudo назва менеджера пакетів install nmon
Ще одна стороння утиліта для системних адміністраторів, що допомагає оцінити стан сервера. На відміну від htop, nmon містить у собі меншу кількість функцій та можливостей адаптації інтерфейсу під свої завдання.
Сама утиліта не має модифікаторів запуску, вона працює в одному режимі і запускається командою nmon.
Інтерфейс nmon ділиться на три частини:
- CPU Utilisation – у першій відображається навантаження на процесор. Всі ядра за списком, від 1 до останнього, і кількість ресурсів, що споживаються користувачем, системою, а також перебувають в очікуванні та простої.
- CPU Utilisation Stats – статистичні дані за тими ж показниками, що відображаються в першій секції.
- Top Processes – список програм, відсортований за ступенем «ненажерливості» процесорних потужностей.
dstat
Команда для встановлення: sudo назва менеджера пакетів install dstat
Якщо підхід до відображення даних у перерахованих вище утилітах чомусь не сподобався, то варто звернути увагу на альтернативу у вигляді dstat. В одному вікні утиліти міститься більше інформації, ніж у аналогічних програм інших розробників.
Показники сервера dstat розподілені по колонках. У першому відображається рівень навантаження у відсотках з боку користувача. Потім йде sys, тобто частина ресурсів, що витрачаються системою та її компонентами. Після – простий.
Також у колонках можна знайти назву процесу, що витрачає потужності чіпа, інформацію про роботу оперативної пам'яті та накопичувача (скільки даних було записано та скільки прочитано). Мережеві показники теж є.
Виведення команди dstat можна налаштувати під свої потреби за допомогою опцій. Наприклад, щоб відсортувати запущені програми з навантаження на чіп і за кількістю ОЗУ, що використовується в даний момент, треба ввести:
dstat -c -top-cpu -dn -top-mem
mpstat
Команда для встановлення: sudo назва менеджера пакетів install mpstat
Підходить тим, хто використовує систему із кількома процесорами. mpstat у зручному вигляді показує інформацію по всіх CPU.
На відміну від того ж top, mpstat не показує запущені програми. У списку чергуються та нумеруються лише встановлені процесори. Потім показується, скільки ресурсів йде на користувача, скільки на систему, а скільки простоює.
За промовчанням команда mpstat виводить дані по всіх CPU відразу, але її можна модифікувати:
- mpstat -P ALL — покаже інформацію про діючі чіпи.
- mpstat -P ALL 6 2 — покаже ті самі дані, але двічі з періодичністю 6 секунд. Для оцінки навантаження у динаміці.
Докладніше з функціональністю mpstat можна ознайомитись, ввівши команду man mpstat.
sar
Команда для встановлення: sudo назва менеджера пакетів install sar
Утиліта для моніторингу завантаженості обладнання та формування звітів на основі отриманих даних. Часто використовуються для збору інформації та подальшого відправлення її на електронну пошту системного адміністратора.
У звіті sar за замовчуванням входять технічні показники пристроїв введення та виведення, інформація про роботу віртуальної пам'яті (підкачування сторінок), дані про перервані операції та про те, як використовується оперативна пам'ять. Ну і ступінь завантаженості процесора, звісно.
За замовчуванням sar виводить на екран середнє значення за всіма показниками, що збираються. Висновок можна скоригувати опціями:
- sar 4 8 – покаже статистику 8 разів з періодичністю 4 секунди (цифри можна вказати будь-які).
- sar -u — додає у дані, що відображаються, всі встановлені в систему чіпи.
- sar -P 4 4 2 – відображає дані по четвертому ядру 2 рази з інтервалом 4 секунди.
Для формування звітів використовується команда:
sar -o output.file 10 6 >/dev/null 2>&1 &
Вона у фоновому режимі збере показники системи. Потім розподілить їх за кількома файлами в директорії з іншими звітами.
corefreq
Багатокомпонентна низькорівнева утиліта, що включає однойменний модуль ядра, демон (програму, що працює у фоновому режимі) і текстову утиліту для управління на стороні клієнта. Модуль ядра отримує повний доступ до сервера і виводить дані за допомогою демона, який працює з привілеями суперкористувача, отримуючи більше даних, ніж інші подібні програми.
CoreFreq заточений для роботи з сучасними 64-бітними процесорами із серій Atom, Core2, Nehalem та аналогічними з родини AMD.
Щоб увімкнути CoreFreq:
Відкриваємо файл із параметрами завантаження:
sudo nano /etc/default/grub
Додаємо до нього рядок:
GRUB_CMDLINE_LINUX="nmi_watchdog=0"
Оновлюємо параметри завантажувача та перезапускаємо систему:
Завантажуємо утиліту із залежностями:
sudo apt-get install git dkms build-essential libc6-dev libpthread-stubs0-dev
Копіюємо CoreFreq з git:
git clone https://github.com/cyring/CoreFreq.git
Переходимо до директорії з утилітою:
Встановлюємо модуль ядра:
sudo insmod corefreqk.ko
Запускаємо однойменний демон:
Включаємо текстову утиліту CoreFreq:
Як знизити навантаження на процесор?
Все залежить від того, чим спричинені надмірні витрати ресурсів процесора. Для початку треба проаналізувати статистику і з'ясувати, в які періоди часу навантаження занадто зростає і який із додатків цей приріст провокує.
- Якщо справа у надмірній активності окремих програм, то потрібно призупинити їхню роботу.
- Щоб знизити навантаження через діяльність пошукових роботів, треба скоротити кількість розділів сайту, яку можна індексувати. Приховати від роботів частину сторінок можна, якщо вказати їх адреси у файлі robots.txt.
- Якщо у всьому винна ненажерлива CMS, варто проаналізувати встановлені плагіни. Можливо, якийсь із них працює некоректно та забирає ресурси, необхідні для нормального функціонування інших компонентів сервера.
- Варто зробити рефакторинг у структурі запитів у базі даних сайту.
- Перевірити, чи немає на сервері шкідливого програмного забезпечення.
Також не варто забувати, що є альтернативне рішення – збільшення потужності сервера. Навіщо боротися з навантаженням, якщо можна зробити його менш помітним для свого VDS? І для цього лише треба орендувати потужнішу «машину».
Підсумки
Найчастіше для отримання загальної картини вистачить статистики з панелі керування. На основі даних звідти можна сформувати план дій та спробувати виправити проблему, якщо така є. Ну а для тих, хто бажає заглибитись у суть проблеми, є з десяток утиліт для моніторингу системи.
Важливим є не вибір інструменту, а наступні дії, що усувають надмірне навантаження на процесор (знову ж таки, якщо воно є) і стабілізують роботу сайту.