Падение производительности сервера на 30% часто остаётся незамеченным, пока не приводит к обрыву сессий пользователей или отказу базы данных. Первым сигналом становится задержка ответа выше 500 мс — это означает, что один из ключевых ресурсов (CPU, RAM, диск или сеть) работает на пределе. Например, load average выше количества ядер процессора на Linux или Memory\Available MBytes ниже 10% от общего объёма в Windows — это уже повод для экстренных действий, а не просто предупреждение.
Но мониторинг не ограничивается базовыми метриками. Apache или Nginx могут выдавать ошибки 502 Bad Gateway из-за перегруженного бэкенда, а MySQL — «зависать» на запросах из-за блокировок таблиц, хотя CPU загружен всего на 40%. В 60% случаев причиной простоя становятся недооценённые параметры: количество открытых файлов (ulimit -n), время ответа DNS или ошибки в логах /var/log/syslog. Далее разберём, что именно отслеживать, какие инструменты использовать и как отличать ложные срабатывания от реальных угроз.
1. Загрузка процессора (CPU): как отличить нормальную нагрузку от критической
Средняя загрузка CPU выше 70% в течение 5+ минут — это не всегда проблема. Например, рендеринг видео или компиляция кода закономерно потребляют ресурсы, но не должны блокировать другие процессы. Опасность представляют два сценария:
- 🔥 Длительная 100% нагрузка одним процессом (например,
php-fpmилиjava): проверьте утечки памяти или бесконечные циклы. - ⚡ Высокий
iowait(более 20%): CPU простаивает, ожидая данные с диска — сигнал о проблемах с хранилищем. - 🧩 Неравномерная загрузка ядер: одно ядро загружено на 99%, остальные — на 5%. Причина: процесс не оптимизирован для многопоточности.
Для диагностики на Linux используйте:
top -c # Просмотр процессов с сортировкой по CPU
mpstat -P ALL # Нагрузка по каждому ядру
htop # Интерактивный мониторинг (установите пакет)
⚠️ Внимание: На виртуальных серверах (VPS) высокий steal time (более 5%) указывает на «кражу» ресурсов соседними ВМ. Это проблема хостинга, а не вашей конфигурации.
Для Windows используйте Performance Monitor (перфмонитор) с счётчиками \Processor(_Total)\% Processor Time и \System\Processor Queue Length. Значение последнего выше 2 на ядро — критический сигнал.
2. Оперативная память (RAM): утечки, своп и скрытые «пожиратели»
Ошибка многих администраторов — ориентироваться только на free -m, где строка available показывает «свободную» память. На самом деле Linux активно использует кеш и буферы, поэтому даже при 10% available система может работать стабильно. Реальные проблемы начинаются, когда:
- 📉 Своп используется регулярно (проверьте
vmstat 1 5— колонкаsi/soне должна показывать активность). - 🐌 Очистка кеша не помогает: после
sync; echo 3 > /proc/sys/vm/drop_cachesпамять освобождается на 10-15 минут, затем снова забивается. - 👻 Невидимые процессы:
ps aux --sort=-%memне показывает «пожирателей», но память утекает (проверьтеslabtopдля ядерных утечек).
| Параметр | Норма | Критическое значение | Инструмент проверки |
|---|---|---|---|
| Своп (swap) | 0% использовано | >5% в течение часа | free -h, vmstat 1 |
| Available memory | >10% от общего объёма | <5% | free -m |
| Active memory | Стабильный уровень | Рост на 100+ МБ/мин | smem -r |
| Slab cache | <10% от общей RAM | >20% | slabtop -sc |
На Windows следите за счётчиками \Memory\% Committed Bytes In Use (не должен превышать 80%) и \Memory\Pages/sec (значения выше 20 указывают на активное своппирование). Для поиска утечек используйте Process Explorer от Microsoft.
Как найти утечку памяти в Docker-контейнерах
Выполните docker stats и отсортируйте контейнеры по колонке MEM %. Если контейнер потребляет больше лимита (--memory), проверьте логи приложения на ошибки OutOfMemoryError (Java) или allowed memory size exhausted (PHP).
3. Дисковое пространство и I/O: почему 10% свободного места — это уже мало
Ошибка No space left on device может возникать даже при 20% свободного места на диске. Причины:
- 📁 Inode исчерпаны: проверьте
df -i. Частая проблема на хостингах с миллионами мелких файлов (например, кеш WordPress). - 🐢 Высокая задержка I/O:
iostat -x 1показываетawait > 20 ms— диск не справляется с нагрузкой. - 🔄 RAID деградировал: проверьте
cat /proc/mdstat(для программного RAID) илиmegacli -LDInfo -Lall -aALL(для аппаратного).
Критические пороги для дисков:
- 🚨 Свободное место: <15% на ext4/XFS, <20% на NTFS (фрагментация!).
- ⚡ Задержка записи:
latency > 100 ms(проверяйтеiotop -o). - 💥 Ошибки SMART:
smartctl -a /dev/sdX | grep -i error. Даже 1 ошибкаReallocated_Sector_Ct— повод для замены диска.
Удалите старые логи (journalctl --vacuum-time=7d)
Очистите кеш пакетов (apt clean или yum clean all)
Найдите крупнейшие файлы (ncdu /)
Проверьте удалённые, но занятые файлы (lsof +L1)
-->
4. Сетевая активность: как выявить DDoS и «тихие» атаки
Сетевые проблемы часто маскируются под «медленный интернет». На самом деле задержки и потери пакетов могут быть вызваны:
- 🕵️ Скрытым сканированием портов: проверьте
netstat -tulnpна неожиданные соединения. - 🌊 SYN-флудом:
ss -sпокажет тысячи соединений в состоянииSYN-RECV. - 📦 Перегрузкой канала:
iftopилиnethogsпомогут найти процесс, потребляющий трафик.
Ключевые метрики для мониторинга:
| Параметр | Норма | Критическое значение |
|---|---|---|
| Пропускная способность | <80% от максимума канала | >90% в течение 10+ минут |
| Потери пакетов (ping) | 0% | >1% |
| Задержка (latency) | <50 мс до ближайшего хоста | >200 мс |
| Количество соединений | <1000 для веб-сервера | >10 000 (возможен DDoS) |
Для Windows используйте Resource Monitor (вкладка «Сеть») или Wireshark для глубокого анализа. Обратите внимание на необычные порты (например, 4444, 3389) — они могут указывать на ботнет или бэкдор.
Раз в неделю|Только при жалобах пользователей|Ежедневно|Автоматизированный мониторинг 24/7-->
5. Логи сервера: где искать первые признаки бедствия
90% проблемют о себе в логах за часы до сбоя. Ключевые файлы для мониторинга:
- 📜 /var/log/syslog или /var/log/messages: ошибки ядра, аппаратные сбои.
- 🌐 /var/log/nginx/error.log (или
apache2/error.log): HTTP-ошибки 5xx, таймауты. - 🗃️ /var/log/kern.log: проблемы с дисками, RAID, файловой системой.
- 🔑 /var/log/auth.log: неудачные попытки входа (возможный брутфорс).
Ищите следующие паттерны:
grep -i"error\|fail\|warning\|timeout\|refused" /var/log/*
Для Windows проверяйте Event Viewer (разделы System, Application, Security>). Особое внимание уделите событиям с ID:
Настройте ротацию логов ( Перегрев — одна из самых недооценённых причин сбоев. Нормальные температуры для компонентов: Проверка на Linux: smartctl -a /dev/sdX | grep Temperature # Для дисков ipmitool sensor reading # Для серверного железа (IPMI)
Event ID 6005 — некорректное завершение работы.Event ID 7000 — сбой службы.Event ID 4625 — неудачный вход (возможная атака).logrotate), чтобы файлы не занимали всё дисковое пространство. Пример конфига для Nginx: /var/log/nginx/*.log { daily; missingok; rotate 14; compress; }6. Температура и аппаратное здоровье: когда сервер «закипает»
sensors # Температуры (установите пакет lm-sensors)
На Windows используйте HWiNFO или Open Hardware Monitor. Особое внимание уделите:
- ⚠️ Резким скачкам температуры (например, с 40°C до 80°C за 5 минут) — признак неисправности кулера.
- 🔋 Напряжению: отклонение от номинала (±5%) может указывать на проблемы блока питания.
⚠️ Внимание: Если сервер находится в дата-центре, температура входящего воздуха не должна превышать 27°C (стандарт ASHRAE). При 30°C+ риск перегрева возрастает в 3 раза.
7. Процессы и службы: как выявить «зомби» и висящие задачи
«Зомби-процессы» (defunct) не потребляют ресурсы, но занимают PID и могут блокировать новые задачи. Проверьте их наличие:
ps aux | grep'Z'
Другие опасные сценарии:
- 🧟 Висящие службы:
systemctl list-units --state=failed(Linux) илиsc query | find"STOPPED"(Windows). - 🔄 Бесконечные рестарты:
journalctl -u servicename --no-pager | grep"restarting". - 🕳️ «Чёрные дыры»: процессы, потребляющие 0% CPU, но висящие в памяти (например,
pythonилиnodeпосле краха).
Для Windows критично отслеживать зависшие сессии RDP (проверяйте через qwinsta или Task Manager → вкладка «Пользователи»). Одна висящая сессия может блокировать новые подключения.
Как убить «неубиваемый» процесс в Linux
Если kill -9 не работает, процесс может быть в состоянии D (Uninterruptible Sleep). Попробуйте:
1. Найдите PID: ps aux | grep D
2. Проверьте, не связан ли он с NFS или диском: ls -l /proc/PID/fd
3. Перезагрузитесь (если это возможно) или используйте echo 1 > /proc/sys/kernel/sysrq + echo t > /proc/sysrq-trigger (осторожно!).
8. Безопасность: признаки взлома, которые нельзя игнорировать
Сервер может быть скомпрометирован месяцами, прежде чем вы это заметите. Красные флаги:
- 🚪 Неизвестные пользователи:
cut -d: -f1 /etc/passwd(Linux) илиnet user(Windows). - 🔑 Подозрительные SSH-ключи:
ls -la ~/.ssh/authorized_keys. - 🕰️ Изменённые системные файлы:
debsums -c(Debian) илиrpm -Va(RHEL). - 📡 Неожиданные исходящие соединения:
ss -tulnp | grep ESTAB.
Проверьте последние выполненные команды:
history | tail -20 # Для текущего пользователя
grep"COMMAND=" /var/log/auth.log # Для всех пользователей (Linux)
На Windows ищите подозрительные задачи в Планировщике заданий (schtasks /query /fo LIST /v) и проверяйте автозагрузку (wmic startup list full).
Настройте оповещения о новых пользователях в системе. Например, в Linux добавьте в /etc/pam.d/sshd строку: session required pam_exec.so /path/to/script.sh, где скрипт будет отправлять уведомление при каждом новом логине.
FAQ: Частые вопросы о мониторинге серверов
Как часто нужно проверять сервер, если на нём нет критических задач?
Минимальная частота — раз в сутки для проверки дискового пространства, загрузки CPU и доступности ключевых служб. Автоматизированный мониторинг (например, Zabbix или Prometheus) должен работать круглосуточно с оповещениями о:
- Загрузке CPU > 80% в течение 10 минут.
- Свободной памяти < 10%.
- Дисковом пространстве < 15%.
- Недоступности портов (80, 443, 22).
Какие инструменты мониторинга бесплатны и подходят для небольших проектов?
Для Linux:
- Netdata — реальный мониторинг в браузере (
bash <(curl -Ss https://my-netdata.io/kickstart.sh)). - Grafana + Prometheus — для визуализации метрик.
- Glances — альтернатива
topс веб-интерфейсом.
Для Windows:
- PRTG Free (до 100 сенсоров).
- Nagios Core + плагин NSClient++.
Что делать, если сервер «лагает», но все метрики в норме?
Проверьте:
- Время ответа DNS:
dig example.com | grep"Query time". Задержка > 100 мс — проблема с резолвером. - MTU сети: большие пакеты фрагментируются, что тормозит соединение. Проверьте
ping -M do -s 1472 google.com. - Конфликты IRQ (актуально для физических серверов):
cat /proc/interrupts. - Настройки TCP:
sysctl net.ipv4.tcp_*— неправильные значенияtcp_keepalive_*могут вызывать задержки.
Как мониторить сервер, если к нему нет доступа по SSH/RDP?
Используйте внешние сервисы:
- UptimeRobot — проверка доступности HTTP/TCP/Ping.
- Pingdom — мониторинг времени ответа.
- StatusCake — проверка SSL-сертификатов и содержимого страниц.
Для глубокого анализа без доступа:
- Настройте SNMP (если поддерживается хостингом).
- Используйте IPMI (для выделенных серверов).
- Попросите поддержку хостинга предоставить скриншоты из консоли управления (например, VMware vSphere или SolusVM).
Какие метрики мониторить в первую очередь для игрового сервера?
Для Minecraft, CS:GO или Rust критичны:
- Tickrate: для CS:GO должен быть стабильно 64+ (проверяйте
net_graph 1в игре). - Задержка сети:
pingмежду сервером и клиентами < 50 мс. - Потоковые ошибки UDP:
netstat -su(ищитеpacket receive errors). - Использование RAM: игровые сервера часто страдают от утечек (например, Spigot на Minecraft).
- Дисковый ввод-вывод: карты в CS:GO или мира в Minecraft при загрузке создают пики I/O.
Используйте плагины для мониторинга внутри игры (например, ServerStats для Minecraft).