Home » Как использовать top, netstat, du и другие инструменты для мониторинга ресурсов сервера
Как использовать top, netstat, du и другие инструменты для мониторинга ресурсов сервера

Как использовать 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 решения или выделенные серверы — они дадут тебе полный контроль над ресурсами и возможность настроить мониторинг именно так, как нужно.

Начни с простых команд, постепенно усложняй свои скрипты и не забывай про визуализацию — красивые графики помогают быстрее понять, что происходит с системой. А главное — практикуйся! Теория без практики в системном администрировании не работает.


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

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

Leave a reply

Your email address will not be published. Required fields are marked