Главная / База знаний / Мониторинг сервера: как следить за CPU, памятью и диском
инструкция · 22 сентября 2026

Мониторинг сервера: как следить за CPU, памятью и диском

Разбираем базовые команды top, htop, free, df и iostat для повседневного контроля нагрузки на VPS, что означает load average и когда пора апгрейдить конфигурацию, а не искать утечку в коде.

Зачем вообще следить за нагрузкой сервера

Пока сайт работает быстро и без ошибок, вопрос нагрузки на сервер обычно не возникает — до того момента, пока страницы не начинают заметно тормозить или сервер не присылает письмо от провайдера о превышении квоты диска. К этому моменту разбираться в причине уже приходится в режиме аврала, а не спокойно и заранее.

Базовый мониторинг — это не сложная система с графиками и алертами, а привычка периодически (или по расписанию через cron) смотреть на несколько простых показателей: сколько занят процессор, сколько свободно памяти и диска, и не растёт ли какой-то из этих показателей быстрее, чем растёт реальная нагрузка от посетителей.

Эта статья разбирает набор встроенных в любой Linux-дистрибутив команд, которых достаточно для повседневного контроля состояния VPS или выделенного сервера, без необходимости с самого начала разворачивать отдельную систему мониторинга.

Load average: три числа, которые видно везде

Load average — это среднее число процессов, ожидающих или использующих процессор, усреднённое за последнюю минуту, 5 минут и 15 минут соответственно. Эти три числа видны в выводе команд uptime, top, htop и во многих других местах — это, пожалуй, самый быстрый способ понять общее состояние сервера одним взглядом.

Вывод команды uptime с тремя значениями load average
uptime\n# 14:32:01 up 12 days,  3:47,  2 users,  load average: 0.52, 0.61, 0.58

Ключевой момент для интерпретации — load average нужно сравнивать с числом ядер процессора, а не с абстрактной шкалой. Значение 2.0 на сервере с 4 ядрами означает, что в среднем занята половина вычислительной мощности — это нормально. То же значение 2.0 на сервере с 1 ядром означает, что задачи уже выстраиваются в очередь, ожидая своей доли процессорного времени.

Число ядер можно посмотреть командой nproc или через содержимое /proc/cpuinfo. Если load average стабильно держится заметно выше числа ядер в часы пиковой посещаемости — это первый объективный сигнал, что текущей конфигурации процессора начинает не хватать.

Проверка числа доступных ядер процессора
nproc\n# 4

Разница между тремя значениями load average тоже несёт информацию. Если минутное значение заметно выше пятиминутного и пятнадцатиминутного, нагрузка выросла только что — возможно, это кратковременный всплеск от одного тяжёлого запроса или запущенного вручную скрипта, и стоит подождать несколько минут перед выводами. Если все три значения близки друг к другу и стабильно высоки, это уже не всплеск, а постоянный уровень нагрузки, с которым сервер живёт постоянно.

Важно понимать, что load average в Linux считает не только процессы, реально занимающие CPU, но и процессы в состоянии uninterruptible sleep — чаще всего это ожидание ответа от диска. Поэтому высокий load average при низкой видимой загрузке CPU в top почти всегда указывает на медленный диск или перегруженную дисковую подсистему, а не на нехватку вычислительной мощности процессора.

top и htop: что происходит на сервере прямо сейчас

Команда top встроена в любой дистрибутив Linux по умолчанию и показывает список процессов в реальном времени, отсортированный по потреблению CPU, с обновлением в несколько секунд. Верхняя часть вывода дублирует load average, общую загрузку CPU по типам (пользовательские процессы, системные вызовы, ожидание диска) и состояние памяти.

Запуск top — интерактивный список процессов, обновляемый в реальном времени
top

htop делает то же самое, но в более читаемом виде: цветные полосы загрузки по каждому ядру отдельно, постраничная прокрутка списка процессов мышью или стрелками, и удобные горячие клавиши — например, F6 или Shift+P для сортировки по CPU, Shift+M для сортировки по памяти, F9 для завершения выбранного процесса без набора отдельной команды kill.

Установка и запуск htop на Debian/Ubuntu
apt install htop -y\nhtop

Практический сценарий использования обеих команд одинаков: сервер вдруг начал отвечать медленнее обычного — первым делом стоит открыть top или htop и посмотреть, какой конкретно процесс потребляет больше всего CPU или памяти прямо сейчас. Часто причина видна сразу: зависший процесс PHP-FPM, резервное копирование в неудачное время суток или неожиданно активный краулер поискового робота, создающий много параллельных запросов.

Если найденный процесс явно зависший и не отвечает, его можно завершить командой kill с указанием PID (виден в первой колонке top и htop), а если процесс важен, но временно создаёт слишком много нагрузки, можно снизить его приоритет командой renice, не останавливая работу полностью, — это позволяет остальным процессам на сервере получить больше процессорного времени, пока фоновая задача продолжает выполняться в менее приоритетном режиме.

Штатное завершение процесса по PID и снижение его приоритета вместо остановки
kill -15 1234\nrenice 10 -p 1234

Память: free -h и разница между free и available

Команда free -h показывает состояние оперативной памяти в удобных единицах (гигабайты вместо байтов). Самая частая ошибка при чтении её вывода — пугаться маленького значения в колонке free и делать вывод, что памяти почти не осталось.

Типичный вывод free -h на сервере с 8 ГБ памяти
free -h\n#               total        used        free      shared  buff/cache   available\n# Mem:           7.8Gi       2.1Gi       0.3Gi       120Mi       5.4Gi       5.6Gi

Linux по умолчанию использует почти всю не занятую процессами память под файловый кэш — buff/cache в примере выше занимает 5.4 из 7.8 ГБ. Это не потерянная память: она мгновенно освобождается и отдаётся любому процессу, которому она реально понадобится, а до этого момента ускоряет повторные обращения к файлам на диске, которые уже читались раньше.

Реальный показатель свободной памяти, доступной для новых процессов, — колонка available, а не free. В примере выше available показывает 5.6 ГБ, что гораздо ближе к действительности, чем пугающие 0.3 ГБ в колонке free. Мониторить стоит именно available, и тревогу имеет смысл поднимать, когда это значение приближается к нулю, а не когда уменьшается free.

Строка Swap в том же выводе free -h показывает, сколько раздела подкачки используется прямо сейчас. Периодическое небольшое использование свопа обычно не страшно, но его стабильный и растущий рост — верный признак, что физической памяти уже не хватает, и система вынужденно выгружает часть данных процессов на диск, который на порядок медленнее оперативной памяти. Заметное падение отзывчивости сайта при одновременном росте использования swap — почти всегда сигнал к увеличению объёма RAM в конфигурации, а не к дальнейшей оптимизации кода.

Диск: df -h, du и что делать при переполнении

Команда df -h показывает занятость дисковых разделов в удобных единицах — это первое, что стоит проверить, если сайт вдруг перестал сохранять файлы, база данных отказывается писать новые записи или почта перестала приходить.

Раздел / заполнен на 95% — повод разобраться, что занимает место
df -h\n# Filesystem      Size  Used Avail Use% Mounted on\n# /dev/vda1        40G   36G  2.1G  95% /

Когда конкретный раздел близок к 100%, следующий шаг — найти, что именно занимает больше всего места. Команда du с сортировкой по размеру directories первого уровня быстро находит основных «виновников».

Топ-10 самых крупных директорий первого уровня внутри /var
du -h --max-depth=1 /var | sort -rh | head -10

Частые кандидаты на переполнение диска: логи, которые никогда не ротировались или не сжимались (особенно логи Nginx, Apache и самого приложения при высокой посещаемости), старые резервные копии, которые копятся в одной директории без автоматической очистки, и журналы систем управления версиями или Docker-образов, накапливающиеся при активной разработке.

Отдельный неочевидный случай — диск показывает почти полную занятость, а du не находит крупных файлов вообще. Это означает, что какой-то процесс продолжает писать в файл, который уже удалили командой rm, — операционная система физически не освобождает место, пока хотя бы один процесс держит файл открытым. Найти такие файлы помогает команда lsof, а решение — перезапустить процесс, всё ещё удерживающий удалённый файл.

Поиск процессов, удерживающих открытыми уже удалённые файлы
lsof 2>/dev/null | grep deleted | awk '{print $1, $2, $10}'

Чтобы логи не накапливались бесконтрольно в принципе, в большинстве дистрибутивов уже настроен logrotate — он автоматически сжимает и удаляет старые файлы логов по расписанию. Стоит проверить конфигурацию конкретного приложения (например, самого веб-сервера или приложения на PHP) на предмет того, действительно ли logrotate охватывает его логи, а не только системные — многие приложения по умолчанию пишут логи в собственную директорию, о которой logrotate ничего не знает, пока не добавить для неё отдельное правило.

Пример правила logrotate: хранить 14 дней логов приложения, сжимая старые файлы
/var/log/myapp/*.log {\n  daily\n  rotate 14\n  compress\n  missingok\n  notifempty\n}

iostat, vmstat и ss: когда узкое место не в CPU и не в памяти

Иногда сервер тормозит при формально невысокой загрузке CPU и достаточном объёме свободной памяти — в таком случае стоит проверить дисковый ввод-вывод и сеть. Команда iostat (из пакета sysstat) показывает, насколько активно диск занят операциями чтения и записи и сколько времени процессы реально ждут ответа от диска.

Установка sysstat и запуск iostat с обновлением каждые 2 секунды
apt install sysstat -y\niostat -x 2

Ключевая колонка в выводе iostat — %util, показывающая процент времени, когда диск был занят операциями ввода-вывода. Значение, стабильно близкое к 100%, при том что CPU и память свободны, обычно означает, что узкое место — именно диск, и решением может быть переход на более быстрый тип накопителя (например, с HDD или SATA SSD на NVMe) либо оптимизация запросов к базе данных, создающих избыточную нагрузку на диск.

Команда vmstat даёт похожую картину в компактном виде одной строкой на интервал — удобна для быстрого взгляда на CPU, память, своп и диск одновременно без переключения между несколькими инструментами.

Пять замеров состояния системы с интервалом 2 секунды
vmstat 2 5

Для проверки сетевых соединений полезна команда ss — современная замена устаревшей netstat, показывающая список открытых соединений и слушающих портов. Она пригодится, если нужно быстро проверить, действительно ли сервис слушает ожидаемый порт, или сколько одновременных соединений держит база данных или веб-сервер прямо сейчас.

Список слушающих портов с процессами и сводная статистика по соединениям
ss -tulnp\nss -s

Отдельный случай: мониторинг сервера с Docker-контейнерами

Если приложения на сервере запущены в Docker-контейнерах, top и htop по-прежнему показывают их процессы, но как обычные процессы хоста, суммарно смешанные со всем остальным, — по этому виду трудно понять, сколько именно ресурсов потребляет конкретный контейнер по сравнению с соседними.

Потребление CPU, памяти и сети отдельно по каждому запущенному контейнеру в реальном времени
docker stats

Команда docker stats решает именно эту задачу — показывает использование CPU, памяти, сети и диска отдельной строкой на каждый работающий контейнер, обновляясь в реальном времени, аналогично top, но в разрезе контейнеров, а не системных процессов. Это особенно полезно, когда на одном сервере запущено несколько независимых сервисов в контейнерах и нужно быстро понять, какой из них создаёт основную нагрузку.

Для разового снимка без интерактивного режима подходит тот же docker stats с флагом --no-stream — удобно вызывать из cron-скрипта, если нужно логировать потребление ресурсов контейнерами на регулярной основе, не открывая интерактивную сессию вручную.

Разовый снимок потребления ресурсов всеми контейнерами в компактной табличной форме
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Простое автоматическое оповещение без отдельной системы мониторинга

Для одного VPS полноценная система вроде Zabbix, Prometheus с Grafana или коммерческих SaaS-решений обычно избыточна — она требует времени на установку, отдельных ресурсов на работу самой системы мониторинга и постоянной поддержки. Для базовой потребности «сообщи мне, если что-то пошло не так» достаточно простого скрипта, запускаемого по cron.

Скрипт проверки занятости диска с отправкой письма при превышении 85%
#!/bin/bash\nDISK_USE=$(df / --output=pcent | tail -1 | tr -d ' %')\nif [ "$DISK_USE" -gt 85 ]; then\n  echo "Диск заполнен на ${DISK_USE}% на сервере $(hostname)" | mail -s "Внимание: мало места на диске" admin@example.ru\nfi

Такой скрипт стоит запускать по расписанию через cron — подробно о синтаксисе crontab и типичных ошибках при настройке рассказано в отдельной статье про задачи по расписанию в Linux.

Аналогичным образом можно добавить проверку load average и свободной памяти в тот же скрипт, чтобы получать одно письмо со всеми проблемами сразу, а не по отдельному скрипту на каждый показатель. Для проектов, где нужна визуализация истории нагрузки за недели и месяцы, а не только текущий момент, разумным промежуточным шагом (до полноценного Zabbix или Grafana) служит Netdata — устанавливается одной командой и сразу даёт веб-интерфейс с графиками по десяткам метрик без ручной настройки каждой из них.

Быстрая установка Netdata с автоматически настроенным веб-интерфейсом мониторинга
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

Чек-лист: на что смотреть в первую очередь

Шесть шагов базового мониторинга сервера: uptime, top/htop, free, df, iostat, автоматическое оповещение по cron

Шаг 1. uptime — быстрый взгляд на load average и сравнение с числом ядер (nproc), чтобы понять, насколько в целом загружен процессор.

Шаг 2. top или htop — если load average повышен, сразу видно, какой конкретно процесс создаёт нагрузку.

Шаг 3. free -h — проверка доступной памяти по колонке available, а не free.

Шаг 4. df -h — проверка занятости дисковых разделов, особенно корневого раздела /.

Шаг 5. Если CPU и память в порядке, а сервер всё равно медленный — iostat -x для проверки, не упирается ли всё в диск.

Шаг 6. Настройте простой cron-скрипт с отправкой письма при превышении пороговых значений по диску и памяти, чтобы узнавать о проблеме заранее, а не постфактум от расстроенных пользователей сайта.

Итог: мониторинг — это привычка, а не разовая настройка

Ни одна из рассмотренных команд не требует установки дополнительного софта (кроме htop, iostat и Netdata, которые ставятся одной командой) и не создаёт заметной нагрузки на сам сервер. Регулярная привычка проверять несколько базовых показателей за минуту экономит часы разбирательств в момент, когда сайт уже недоступен, а причина не очевидна.

Если после регулярного мониторинга становится понятно, что текущей конфигурации процессора, памяти или диска стабильно не хватает в часы пиковой нагрузки, — это объективный повод для апгрейда конфигурации, а не сигнал искать несуществующую утечку в коде часами. Сравнить текущую конфигурацию с более мощными вариантами можно в калькуляторе стоимости или подобрать новую конфигурацию VPS с нужным запасом ресурсов сразу.

Если разобраться в показаниях top или iostat самостоятельно не получается, или нужна помощь с настройкой автоматических оповещений под конкретный проект, — оставьте заявку внизу страницы, поможем настроить мониторинг под вашу конфигурацию сервера.

почему мы

Почему стоит выбрать нас

Быстрый запуск

Подберём конфигурацию и развернём проект в день обращения.

Надёжность

NVMe-диски, защита от DDoS и резервные копии по расписанию.

Поддержка 24/7

Дежурные инженеры на связи в любое время суток.

Настройка под ключ

Установим CMS, настроим веб-сервер, SSL и почту за вас.

Перенос без простоя

Аккуратно перенесём сайт и базу данных на новый сервер.

Прозрачные цены

Актуальные тарифы и честный подбор без навязывания.

частые вопросы

Вопросы и ответы

Какое значение load average считается нормальным?

Ориентир — не превышать число ядер процессора: load average около 2.0 на сервере с 4 ядрами означает, что в среднем процессор загружен наполовину, а то же значение на 1-ядерном сервере — что задачи уже выстраиваются в очередь.

Почему free -h показывает мало свободной памяти, хотя сервер работает нормально?

Linux активно использует свободную память под файловый кэш (buff/cache), чтобы ускорить повторный доступ к данным на диске, — эта память мгновенно освобождается при необходимости, и ориентироваться нужно на колонку available, а не на free.

top или htop — что лучше использовать?

htop даёт тот же набор данных в более наглядном виде с цветной подсветкой и постраничным списком процессов, но требует отдельной установки; top есть в системе по умолчанию везде и подходит, когда нужно быстро посмотреть на сервер без лишних действий.

Диск показывает 100% занятого места, но du не находит крупных файлов — в чём дело?

Частая причина — открытые, но уже удалённые файлы: процесс продолжает писать в файл, который удалили через rm, и место освобождается только после перезапуска процесса, всё ещё держащего файловый дескриптор. Найти такие файлы можно командой lsof | grep deleted.

Нужно ли устанавливать полноценную систему мониторинга вроде Zabbix на один VPS?

Для одного сервера это обычно избыточно — простой скрипт с cron, проверяющий свободное место и нагрузку раз в несколько минут и отправляющий письмо при превышении порога, закрывает базовую потребность с минимальными затратами ресурсов и времени на настройку.

Что делать, если load average стабильно выше числа ядер?

Сначала определить, какой процесс создаёт нагрузку, через top или htop (сортировка по CPU клавишей Shift+P) — если нагрузку создаёт ожидаемый процесс вроде базы данных под реальной пользовательской нагрузкой, это сигнал к апгрейду конфигурации; если нагрузку создаёт неожиданный процесс, это повод разобраться в его поведении, а не сразу увеличивать ресурсы.

Показывает ли htop нагрузку внутри Docker-контейнеров?

htop, запущенный на хосте, показывает процессы контейнеров как обычные процессы хоста и суммарно учитывает их в общей картине CPU и памяти, но не разбивает нагрузку по конкретным контейнерам — для этого удобнее команда docker stats, показывающая потребление ресурсов отдельно по каждому запущенному контейнеру.

Как оплачивать услуги?

Оплата помесячная, для облачных серверов доступна почасовая тарификация. Принимаются карты, банковские переводы и электронные кошельки.

Есть ли круглосуточная поддержка?

Да, дежурные инженеры на связи 24/7.

Выдаёте ли закрывающие документы?

Да, предоставим необходимые документы для оплаты.

Как оставить заявку?

Заполните форму на странице или нажмите «Заказать» — мы свяжемся и поможем с подбором.

заявка

Оставьте заявку

Ответим и поможем с подбором и настройкой.