Сервер став повільним: як перевірити RAM, CPU і диск
Якщо ваш сервер сповільнився, перевірте три речі: RAM, CPU і диск. Підключіться й виконайте три команди: free -h для пам’яті, top для процесора й df -h для диска. Що з трьох заповнене, те й вузьке місце. Якщо всі три в нормі, проблема зазвичай у самому застосунку.
Почніть із навантаження
Середнє навантаження (load average) — це середня кількість процесів, що чекають на CPU або диск. Перші три числа у виводі нижче — середні за останні 1, 5 і 15 хвилин. Порівняйте їх із кількістю ядер:
cat /proc/loadavg
nproc
Якщо навантаження довго лишається вищим за кількість ядер, сервер не справляється з роботою.
RAM: free -h
free -h
Найважливіший стовпець — Доступно. Якщо там дуже мало, а рядок Swap заповнюється, RAM вичерпано. Коли пам’ять закінчується, ядро завершує один із процесів, що найбільше її використовують (OOM killer). Часто на це вказує база даних чи вебзастосунок, що закривається сам. Перевірте так:
sudo dmesg -T | grep -i -E "out of memory|killed process"
CPU: top
top
На екрані, що відкрився, клавіша P сортує процеси за використанням CPU, а клавіша M — за використанням пам’яті. Щоб вийти, натисніть q. У рядку CPU вгорі зверніть увагу на таке:
- us: частка користувацьких процесів. Якщо вона висока, застосунок з’їдає CPU.
- wa: час очікування вводу й виводу диска. Якщо він високий, проблема не в CPU, а в диску.
- st: час, «вкрадений» у віртуального сервера, тобто час, який рівень віртуалізації віддав CPU комусь іншому. Якщо він лишається високим, проблема може бути не всередині вашого сервера. Тоді зверніться до підтримки.
Диск: df -h
df -h
df -i
Перша команда показує зайняте місце, а друга — ліміт кількості файлів (inodes). Коли диск заповнений повністю, бази даних і застосунки не можуть записувати, а сервер сповільнюється або видає помилки. З’ясуйте, що займає місце:
sudo du -xh / --max-depth=1 2>/dev/null | sort -h | tail -n 8
Якщо системні журнали розрослися, їх можна зменшити командою sudo journalctl --vacuum-size=200M. Якщо ви користуєтеся Docker, docker system df показує місце, зайняте образами й контейнерами, а docker stats --no-stream — скільки CPU та пам’яті використовує кожен контейнер.
Симптом, імовірна причина та рішення
| Симптом | Імовірна причина | Що робити |
|---|---|---|
| Сторінки час від часу повільні, Доступно мало, swap заповнений | Не вистачає RAM | Вимкніть непотрібні служби та зменште налаштування пам’яті застосунку (наприклад, кількість працівників PHP-FPM чи пам’ять бази даних). Якщо цього недостатньо, збільште сервер. |
Служба закривається сама, у виводі dmesg з’являється «killed process» | Пам’ять закінчилася, і втрутився OOM killer | Додайте RAM або зменште використання пам’яті. |
Один процес у top постійно повністю займає ціле ядро | Завислий процес, несправний плагін або цикл | Знайдіть процес, а потім виправте або вимкніть застосунок чи плагін, що за ним стоїть. |
| Навантаження високе, CPU простоює, wa високий | Очікується диск (інтенсивний запис або swap) | Подивіться стовпці si і so у виводі vmstat 1 5. Якщо swap використовується, додайте RAM. |
df -h або df -i показує повне заповнення | Закінчилося місце на диску або inodes | Очистьте великі файли й журнали. Якщо він і далі заповнюється, збільште сервер. |
| st лишається високим | Проблема може бути поза вашим сервером | Зверніться до підтримки. |
У Seturack швидкість диска кожного сервера обмежена: постійне читання 500 МБ/с і 20 000 IOPS, запис 200 МБ/с і 8000 IOPS. Якщо ваші значення у виводі iostat -x 1 5 сягають цих цифр, повільність спричиняє навантаження на диск. Зменште обсяг роботи кешуванням або розподіліть її в часі. Якщо iostat немає, встановіть його командою sudo apt install -y sysstat.
Коли допомагає swap?
Swap використовує диск замість RAM. Він дає серверу переживати короткі стрибки пам’яті без OOM killer, але не такий швидкий, як RAM. Якщо si і so у виводі vmstat 1 5 лишаються вищими за нуль, сервер постійно пише у swap. Тут допоможе RAM, а не swap. Якщо swap немає (swapon --show нічого не виводить) і ви хочете згладити стрибки, можна додати файл swap на 2 ГБ. Ці команди призначені для файлової системи ext4:
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Якщо ресурси в нормі
Якщо RAM, CPU і диск виглядають комфортно, подивіться назву верхнього процесу в top:
- Якщо вгорі
php-fpm,apache2абоnginx, проблема зазвичай у самому сайті: важкий плагін, відсутнє кешування чи раптовий приплив відвідувачів. - Якщо вгорі
mysqldабоmariadbd, є повільні запити. Увімкніть журнал повільних запитів бази даних і подивіться, які запити тривають довго. - Якщо невідомий вам процес постійно їсть CPU, сервер могли зламати. Змініть паролі, перевірте відкриті сеанси та вивід
sudo ss -tulpnі за потреби перевстановіть сервер із чистою системою.
Коли збільшувати сервер
Порядок такий: спершу налаштуйте, додайте кешування, вимкніть непотрібну роботу. Якщо навантаження після цього все ще високе, збільште сервер. У панелі відкрийте вкладку Розмір свого сервера, пересуньте повзунки на новий розмір і підтвердьте. Після оплати сервер сам один раз перезапускається й повертається вже в новому розмірі. Ваша IP-адреса й дані залишаються тими самими, а платите ви лише різницю за дні, що залишилися. RAM, vCore і диск можна збільшувати окремо, тож підвищуєте лише те, чого бракує. Збільшення збільшує диск, а зменшення диск не стискає. Докладніше читайте в статті про зміну розміру.
Якщо через навантаження сервер взагалі не відповідає, SSH може не підключатися. Тоді відкрийте консоль VNC у панелі або перезапустіть сервер із панелі.
Коментарі0
Коментарів поки немає
Поділіться своєю думкою першим.
Будь ласка, увійдіть або зареєструйтеся, щоб залишити коментар.