Коли сервер гальмує, перше, що потрібно з'ясувати, — який процес забирає ресурси. Загальна діагностика навантаження описана в статті «Як перевірити навантаження на VPS», а тут — робота з окремими процесами.
htop — наочний список процесів
sudo apt install htop # Ubuntu, Debian
sudo dnf install htop # AlmaLinux, Rocky
htop
- угорі — завантаження кожного ядра, пам'ять і swap;
- F6 — сортування (за
CPU%абоMEM%); - F3 — пошук процесу, F4 — фільтр;
- F5 — дерево процесів;
- F9 — завершити вибраний процес;
- q — вихід.
Якщо htop немає, є вбудований top: P — сортувати за процесором, M — за пам'яттю, q — вихід.
ps — знайти процес
ps aux | grep php
ps aux --sort=-%mem | head -10 # 10 процесів, що займають найбільше пам'яті
ps aux --sort=-%cpu | head -10 # 10 найбільш навантажувальних
pgrep -a nginx # PID і команди процесів за назвою
Друга колонка у виводі ps aux — PID, ідентифікатор процесу.
kill — завершити процес
kill 12345 # коректно попросити процес завершитися (SIGTERM)
kill -9 12345 # примусово «вбити», якщо не реагує (SIGKILL)
pkill -f script.php # за назвою або частиною команди
killall php # усі процеси з такою назвою
Спочатку завжди пробуйте звичайний kill — він дає програмі зберегти дані. kill -9 — крайній захід.
Не вбивайте процеси служб (nginx, mysqld, php-fpm) вручну — їх перезапустить systemd або вони залишать пошкоджені дані. Для служб використовуйте systemctl restart — див. керування службами.
Довгі команди, які не мають перерватися
Якщо закрити SSH-сесію, запущена в ній команда завершиться. Для імпорту бази, копіювання чи оновлення, які тривають довго, використовуйте screen або tmux:
sudo apt install screen
screen -S import # створити сесію з назвою
# ... запустіть команду ...
# Ctrl+A, потім D — від'єднатися, команда продовжить роботу
screen -r import # повернутися до сесії
screen -ls # список сесій
Простіший варіант для однієї команди — nohup:
nohup php import.php > import.log 2>&1 &
Вивід команди потрапить у import.log.
Процес «їсть» пам'ять, а потім зникає
Якщо пам'ять закінчується, ядро саме завершує найбільший процес (OOM killer). Перевірте:
sudo dmesg -T | grep -i "killed process"
Допоможе swap-файл, оптимізація або більший тариф.