- Home »

Как использовать top, netstat, du и другие инструменты для мониторинга ресурсов сервера
Мониторинг серверных ресурсов — это база, без которой ты просто слепой в своём дата-центре. Представь: у тебя крутится веб-сервис, и внезапно всё начинает тормозить. Пользователи недовольны, боссы нервничают, а ты сидишь и гадаешь — может, память кончилась? Или процессор загружен на 99%? А может, дискового пространства не хватает? Именно для таких моментов (и для их предотвращения) нужно знать базовые инструменты мониторинга Linux. В этой статье разберём классические утилиты: top, netstat, du, df, iostat, vmstat и несколько других полезных команд. Ты получишь пошаговое руководство с практическими примерами, научишься читать выводы этих команд и поймёшь, как автоматизировать мониторинг через скрипты.
Основы мониторинга: зачем и что отслеживать
Любой сервер имеет четыре ключевых ресурса, которые нужно контролировать:
- CPU — процессорное время и загрузка
- Memory — оперативная память и swap
- Disk I/O — дисковые операции чтения/записи
- Network — сетевые соединения и пропускная способность
Когда один из этих ресурсов становится узким местом, производительность всей системы падает. Задача мониторинга — поймать проблему на раннем этапе и быстро её диагностировать.
Top: классика процессного мониторинга
Команда top
— это швейцарский нож для мониторинга процессов. Она показывает в реальном времени, какие процессы потребляют ресурсы системы.
Базовое использование
top
Вывод разделён на две части: системную информацию сверху и список процессов снизу. В заголовке ты увидишь:
- Load average — средняя нагрузка за 1, 5 и 15 минут
- CPU usage — процент использования процессора
- Memory usage — использование оперативной памяти
- Swap usage — использование файла подкачки
Полезные опции и горячие клавиши
# Сортировка по использованию памяти
top -o %MEM
# Показать только процессы конкретного пользователя
top -u username
# Обновлять каждые 2 секунды
top -d 2
Внутри top можно использовать горячие клавиши:
- M — сортировка по памяти
- P — сортировка по CPU
- k — убить процесс (kill)
- q — выйти
Альтернативы: htop и btop
Если классический top кажется слишком аскетичным, попробуй htop
— он более наглядный и функциональный:
# Установка htop
sudo apt install htop # Ubuntu/Debian
sudo yum install htop # CentOS/RHEL
# Запуск
htop
Ещё более современная альтернатива — btop
, написанная на C++ с красивой графикой и низким потреблением ресурсов.
Netstat: анализ сетевых соединений
Команда netstat
показывает активные сетевые соединения, таблицы маршрутизации и статистику интерфейсов.
Основные опции
# Показать все активные соединения
netstat -a
# Показать только TCP соединения
netstat -at
# Показать только UDP соединения
netstat -au
# Показать соединения с числовыми адресами (без DNS резолвинга)
netstat -an
# Показать процессы, использующие порты
netstat -tulpn
Практические примеры
Проверить, какие порты слушает сервер:
# Показать все прослушиваемые порты
netstat -tuln
# Найти процесс, использующий порт 80
netstat -tulpn | grep :80
# Подсчитать количество соединений по состояниям
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c
Современная альтернатива: ss
Команда ss
(socket statistics) работает быстрее netstat, особенно на загруженных серверах:
# Показать все TCP соединения
ss -t
# Показать прослушиваемые порты
ss -tuln
# Показать соединения с процессами
ss -tulpn
Du и df: мониторинг дискового пространства
Команды du
(disk usage) и df
(disk free) помогают контролировать использование дискового пространства.
Df: обзор файловых систем
# Показать использование всех файловых систем
df -h
# Показать использование конкретной директории
df -h /var/log
# Показать inodes
df -i
Du: анализ размеров директорий
# Показать размер текущей директории
du -sh .
# Показать размеры всех поддиректорий
du -sh */
# Найти самые большие директории
du -h --max-depth=1 | sort -hr
# Найти файлы больше 100MB
find /var/log -type f -size +100M -exec ls -lh {} \;
Практический кейс: поиск пожирателей места
Когда диск заполнен, используй этот скрипт для быстрого поиска проблемных мест:
#!/bin/bash
# disk_hogs.sh - поиск больших файлов и директорий
echo "=== Использование дискового пространства ==="
df -h
echo -e "\n=== Топ-10 самых больших директорий в корне ==="
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -10
echo -e "\n=== Файлы больше 1GB ==="
find / -type f -size +1G -exec ls -lh {} \; 2>/dev/null | head -10
Iostat: мониторинг дисковых операций
Команда iostat
входит в пакет sysstat и показывает статистику дисковых операций.
Установка и базовое использование
# Установка sysstat
sudo apt install sysstat # Ubuntu/Debian
sudo yum install sysstat # CentOS/RHEL
# Показать статистику дисков
iostat
# Обновлять каждые 2 секунды
iostat 2
# Показать расширенную статистику
iostat -x
Ключевые метрики
Метрика | Описание | Нормальное значение |
---|---|---|
%iowait | Процент времени, когда CPU ждёт I/O | < 20% |
avgqu-sz | Средняя длина очереди запросов | < 10 |
await | Среднее время ожидания запроса (мс) | < 20ms |
%util | Процент загрузки диска | < 80% |
Vmstat: мониторинг виртуальной памяти
Команда vmstat
показывает статистику виртуальной памяти, процессов и CPU.
# Показать текущую статистику
vmstat
# Обновлять каждые 5 секунд
vmstat 5
# Показать статистику памяти в мегабайтах
vmstat -S m
Расшифровка вывода
- r — количество процессов в очереди на выполнение
- b — процессы в состоянии uninterruptible sleep
- swpd — используемая виртуальная память
- free — свободная память
- si/so — swap in/out (страницы/сек)
Дополнительные инструменты
Lsof: кто использует файлы
# Показать открытые файлы
lsof
# Показать файлы, открытые процессом
lsof -p PID
# Показать процессы, использующие порт
lsof -i :80
# Показать процессы, использующие файл
lsof /var/log/syslog
Ps: детальная информация о процессах
# Показать все процессы
ps aux
# Показать процессы в виде дерева
ps auxf
# Показать процессы, отсортированные по использованию памяти
ps aux --sort=-%mem | head
Free: быстрый обзор памяти
# Показать использование памяти
free -h
# Обновлять каждые 2 секунды
free -h -s 2
Автоматизация мониторинга
Для автоматизации мониторинга можно создать скрипт, который будет собирать ключевые метрики:
#!/bin/bash
# monitor.sh - сбор основных метрик системы
LOG_FILE="/var/log/system_monitor.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$TIMESTAMP] === System Monitor Report ===" >> $LOG_FILE
# CPU и нагрузка
echo "Load Average: $(uptime | awk -F'load average:' '{print $2}')" >> $LOG_FILE
echo "CPU Usage: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)" >> $LOG_FILE
# Память
MEM_INFO=$(free -m | grep "Mem:")
echo "Memory: $(echo $MEM_INFO | awk '{printf "Used: %dMB (%.1f%%), Free: %dMB", $3, $3*100/$2, $4}')" >> $LOG_FILE
# Дисковое пространство
echo "Disk Usage:" >> $LOG_FILE
df -h | grep -E '^/dev/' | awk '{print $6 ": " $5 " used"}' >> $LOG_FILE
# Топ процессов по памяти
echo "Top 5 processes by memory:" >> $LOG_FILE
ps aux --sort=-%mem | head -6 | tail -5 >> $LOG_FILE
echo "" >> $LOG_FILE
# Отправка уведомления при высокой нагрузке
LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk -F',' '{print $1}' | sed 's/^ *//')
if (( $(echo "$LOAD_AVG > 2.0" | bc -l) )); then
echo "High load detected: $LOAD_AVG" | mail -s "Server Alert" admin@example.com
fi
Добавь этот скрипт в cron для регулярного выполнения:
# Запускать каждые 5 минут
*/5 * * * * /path/to/monitor.sh
Продвинутые техники и нестандартные способы
Мониторинг в реальном времени с помощью watch
# Отслеживать изменения в выводе команды каждые 2 секунды
watch -n 2 'df -h'
# Мониторинг сетевых соединений
watch -n 1 'netstat -tuln | grep LISTEN'
# Отслеживание логов в реальном времени
watch -n 1 'tail -10 /var/log/syslog'
Создание дашборда в терминале
Можно создать простой дашборд, комбинируя различные команды:
#!/bin/bash
# dashboard.sh - терминальный дашборд
while true; do
clear
echo "========== Server Dashboard =========="
echo "Time: $(date)"
echo "Uptime: $(uptime | awk -F',' '{print $1}' | awk -F'up' '{print $2}')"
echo ""
echo "=== Load Average ==="
uptime | awk -F'load average:' '{print $2}'
echo ""
echo "=== Memory Usage ==="
free -h | grep -E '(Mem|Swap)'
echo ""
echo "=== Disk Usage ==="
df -h | grep -E '^/dev/' | awk '{print $6 ": " $5}'
echo ""
echo "=== Top 5 Processes ==="
ps aux --sort=-%cpu | head -6 | tail -5 | awk '{print $11 " - CPU: " $3 "%, MEM: " $4 "%"}'
echo ""
echo "=== Network Connections ==="
netstat -an | grep ESTABLISHED | wc -l | awk '{print "Established connections: " $1}'
sleep 5
done
Интеграция с системами мониторинга
Для серьёзного мониторинга стоит рассмотреть интеграцию с современными системами:
- Prometheus + Grafana — для метрик и визуализации
- ELK Stack — для логов и аналитики
- Nagios/Icinga — для alerting
- Zabbix — комплексное решение
Базовые команды можно легко адаптировать для отправки метрик в эти системы.
Таблица сравнения инструментов
Инструмент | Назначение | Плюсы | Минусы |
---|---|---|---|
top | Мониторинг процессов | Везде есть, простой | Базовый интерфейс |
htop | Мониторинг процессов | Красивый интерфейс, функциональный | Нужно устанавливать |
netstat | Сетевые соединения | Стандартная утилита | Медленная на больших системах |
ss | Сетевые соединения | Быстрая, современная | Может отсутствовать на старых системах |
iostat | Дисковые операции | Детальная статистика | Требует понимания метрик |
vmstat | Виртуальная память | Комплексный обзор | Не очень наглядный |
Когда что использовать
Для быстрой диагностики: top, free, df -h
При проблемах с производительностью: iostat, vmstat, iotop
При сетевых проблемах: netstat, ss, lsof
При нехватке места: du, df, find
Для автоматизации: скрипты с ps, awk, cron
Заключение и рекомендации
Мониторинг серверных ресурсов — это не только reactive задача (реагирование на проблемы), но и proactive процесс (предотвращение проблем). Изучи базовые команды, создай собственные скрипты мониторинга и настрой alerting для критических метрик.
Помни о золотых правилах мониторинга:
- Мониторь то, что критично для бизнеса
- Устанавливай разумные threshold’ы для alerting
- Документируй свои находки и решения
- Автоматизируй рутинные проверки
Если твоему проекту нужен надёжный сервер для мониторинга, обрати внимание на VPS решения или выделенные серверы — они дадут тебе полный контроль над ресурсами и возможность настроить мониторинг именно так, как нужно.
Начни с простых команд, постепенно усложняй свои скрипты и не забывай про визуализацию — красивые графики помогают быстрее понять, что происходит с системой. А главное — практикуйся! Теория без практики в системном администрировании не работает.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.