Какие знаешь команды для диагностики состояния сервера?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Диагностика состояния сервера в DevOps
Диагностика состояния сервера — это комплексный процесс, требующий анализа различных метрик системы. Я использую как базовые команды для быстрой проверки, так и продвинутые инструменты для глубокого расследования проблем. Вот основные категории и команды.
1. Мониторинг ресурсов (CPU, Memory, Disk, Network)
CPU и общая нагрузка:
# Просмотр нагрузки системы в реальном времени
top
htop # более продвинутая версия с цветовым оформлением
# Краткая сводка по нагрузке (отлично для скриптов)
uptime # показывает среднюю нагрузку за 1, 5 и 15 минут
Память (RAM и Swap):
# Детальная информация об использовании памяти
free -h # флаг -h для человеко-читаемого формата
vmstat 2 5 # статистика каждые 2 секунды, 5 раз
# Мониторинг в реальном времени
watch -n 2 free -h # обновление каждые 2 секунды
Дисковое пространство и I/O:
# Свободное место на дисках
df -h # показывает использование по файловым системам
df -i # информация об inode (важно для серверов с множеством мелких файлов)
# Проверка дискового ввода/вывода
iostat -x 2 # детальная статистика по дискам
iotop # аналог top для дискового I/O (требует установки)
Сетевая активность:
# Статистика по сетевым интерфейсам
ip -s link # подробная статистика по пакетам и ошибкам
ss -tulpn # современная замена netstat, показывает открытые порты
# Мониторинг трафика в реальном времени
iftop # показывает трафик по соединениям
nethogs # показывает трафик по процессам
2. Анализ процессов и служб
Управление процессами:
# Поиск процессов по имени или потреблению
ps aux | grep nginx # поиск процессов nginx
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head # топ по потреблению памяти
# Детальный анализ конкретного процесса
lsof -p <PID> # список открытых файлов процессом
strace -p <PID> # трассировка системных вызовов (для отладки)
Службы и их статус:
# Для систем на systemd
systemctl status <service_name> # статус службы
journalctl -u <service_name> -f # логи службы в реальном времени
systemctl list-units --type=service --state=failed # список упавших служб
3. Логи и журналы событий
Централизованный просмотр логов:
# Основные системные логи
tail -f /var/log/syslog # Ubuntu/Debian
tail -f /var/log/messages # RHEL/CentOS
# Логи конкретных служб
tail -f /var/log/nginx/error.log
tail -f /var/log/mysql/error.log
# Поиск по логам
grep -r "error" /var/log/*.log # рекурсивный поиск ошибок
journalctl --since "2024-01-01" --until "2024-01-02" # логи за период
4. Специализированные инструменты для глубокой диагностики
Производительность системы:
# Комплексный мониторинг
dstat # объединяет vmstat, iostat, ifstat и другие
# Анализ производительности в реальном времени
perf top # профилирование процессора
sar # системный сборщик статистики (требует установки и настройки)
Безопасность и сеть:
# Проверка открытых портов и соединений
netstat -an | grep LISTEN # классическая команда (часто установлена по умолчанию)
nmap -sT -O localhost # сканирование портов локально
# Проверка конфигурации сети
ip addr show # информация о сетевых интерфейсах
ping -c 4 google.com # проверка доступности сети
traceroute google.com # трассировка маршрута
5. Автоматизация диагностики
В реальной практике я создаю скрипты для регулярной проверки, например:
#!/bin/bash
# Скрипт для быстрой диагностики
echo "=== Системная сводка ==="
echo "Время работы: $(uptime)"
echo "Загрузка CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}')%"
echo "Свободная память: $(free -h | grep Mem | awk '{print $4}')"
echo "Свободное место на дисках:"
df -h | grep -v tmpfs
echo "Топ-5 процессов по памяти:"
ps -eo pid,comm,%mem,%cpu --sort=-%mem | head -6
Для производственных сред я предпочитаю использовать системы мониторинга (Prometheus, Grafana, Zabbix) и централизованного сбора логов (ELK Stack, Loki). Эти инструменты позволяют не только реагировать на проблемы, но и прогнозировать их, анализируя тренды и устанавливая автоматические алерты.
Главный принцип диагностики — начинать с общего состояния (uptime, load average), затем переходить к конкретным ресурсам (CPU, память, диск), и только потом анализировать логи и отдельные процессы. Такой подход позволяет быстро локализовать проблему и минимизировать время простоя сервисов.