Мониторинг CPU, RAM и диска на VPS.
Как увидеть, что прямо сейчас потребляет ресурсы, на что смотреть в долгосрочных метриках и какие бесплатные инструменты подойдут для оповещений.
Вы запускаете VPS в продакшен, трафик растёт, и вдруг сайт начинает тормозить. Первый вопрос: где узкое место? CPU? RAM? Дисковый ввод-вывод? Сеть?
Быстрый взгляд в панели
Новая панель (rivervo.com/panel): на странице сервера есть карточка Нагрузка сейчас с графиками CPU, Сеть (входящий/исходящий) и Диск (чтение/запись) за последние 1, 6 или 24 часа. Она обновляется каждую минуту.
RAM и место на диске она не показывает — для них, а также для подробностей по процессам используйте инструменты ниже внутри сервера.
Просмотр в реальном времени
Подключитесь по SSH и выполните:
topВверху экрана: средняя нагрузка (load average, 1 мин / 5 мин / 15 мин). Нагрузка больше числа ядер CPU означает, что упираетесь в CPU.
Список процессов: по умолчанию отсортирован по %CPU по убыванию. Нажмите M, чтобы отсортировать по памяти.
Для более удобного интерфейса установите htop:
sudo apt install htop # Ubuntu/Debian
sudo dnf install htop # RHEL/Alma
htopПеремещайтесь стрелками, F9 — завершить процесс.
Память
free -hПоказывает всего / занято / свободно / буферы / кеш.
Кешированная память не «занята». Linux использует свободную RAM как кеш файловой системы и освобождает её, когда она нужна приложениям. Реальный «свободный» объём — в столбце available.
Если память закончилась, срабатывает OOM killer и завершает самый крупный процесс. Выполните dmesg | grep -i kill, чтобы увидеть, что было убито.
Место на диске
df -h # disk space per filesystem
du -sh /* # space per top-level dir
du -sh /var/* # drill into /varЧтобы найти большие файлы:
find / -size +500M -exec ls -lh {} \; 2>/dev/nullЧаще всего место занимают: /var/log (настройте ротацию журналов), /var/lib/docker (удалите неиспользуемые образы: docker system prune -a), /tmp, каталоги данных MySQL.
Дисковый ввод-вывод (тихий убийца)
iostat -x 5 # if installed (apt install sysstat)Следите за столбцом %util. Стабильно выше 70% — узкое место в диске.
Ввод-вывод по процессам:
sudo iotop(установка: sudo apt install iotop)
Сеть
sudo iftop # real-time bandwidth per connection
sudo nethogs # bandwidth per processИли для общего трафика:
ifstat 1Долгосрочные метрики
Инструменты реального времени показывают, что происходит СЕЙЧАС. Для трендов установите что-то постоянно работающее:
Netdata (бесплатный, лёгкий, с очень красивым веб-интерфейсом):
bash <(curl -SsL https://my-netdata.io/kickstart.sh)Откройте http://your-vps:19999. Всё обнаруживается автоматически — CPU, RAM, диск, сеть, MySQL, Redis, Nginx, Docker и т. д. Большинству хватает бесплатной версии.
Prometheus + Grafana (полный стек, больше настройки): для серьёзного мониторинга с оповещениями и долгим хранением. Стандарт для продакшена.
Glances (альтернатива top, работает постоянно):
sudo apt install glances
glances --webserver --port 61208Оповещения
Работающие бесплатные варианты:
- UptimeRobot — бесплатно для 50 мониторов, проверяет ваши сервисы каждые 5 минут, оповещает о недоступности
- Healthchecks.io — бесплатно для 20 cron-проверок, оповещает, когда задачи по расписанию не присылают сигнал
- Netdata Cloud — бесплатные оповещения по собранным метрикам
- Grafana Cloud — бесплатно 10k метрик + оповещения
Письма от cron-задач тоже работают, но их количество ограничено, и когда они накапливаются, их легко перестать замечать.
Быстрая диагностика медленного сайта
Выполните по очереди:
uptime # load avg — CPU-bound?
free -h # memory pressure?
df -h # disk full?
iostat -x 5 5 # disk I/O bottleneck?
top # what processes are eating CPU?Примерно за 60 секунд вы поймёте, в каком ресурсе проблема и какой процесс за неё отвечает.