Ответ
Для диагностики проблем на Linux-серверах я использую набор утилит, которые позволяют быстро локализовать проблему: высокая нагрузка, нехватка памяти, дисковые или сетевые аномалии. Вот мой стандартный подход и инструменты.
Первичный осмотр ("quick health check"): Первым делом я смотрю общую картину с помощью одной команды:
# Проверяю uptime (load average), память, дисковое пространство и топ процессов
echo "=== Load Average ===" && uptime
echo "n=== Memory Usage ===" && free -h
echo "n=== Disk Space ===" && df -hT | grep -v tmpfs
echo "n=== Top 5 Processes by CPU ===" && ps aux --sort=-%cpu | head -6
echo "n=== Top 5 Processes by MEM ===" && ps aux --sort=-%mem | head -6
Детальная диагностика по категориям:
1. Нагрузка на CPU и процессы:
htop/top— Интерактивный мониторинг процессов.htopпредпочтительнее из-за цветового выделения и удобной навигации.pidstat 2 5— Статистика по отдельным процессам с обновлением каждые 2 секунды (5 отчетов). Показывает потребление CPU, памяти, дискового ввода-вывода.mpstat -P ALL 2— Показывает загрузку по каждому ядру CPU. Помогает выявить проблему с single-threaded процессом, нагружающим одно ядро.
2. Память (RAM и Swap):
free -m— Быстрый просмотр использования оперативной памяти и swap.vmstat 2 5— Вывод статистики по памяти, swap, процессам. Ключевые поля:si(swap in),so(swap out). Еслиso> 0 постоянно — нехватка RAM.
3. Дисковый ввод-вывод (I/O):
iostat -xz 2— Показывает нагрузку на диски, время ожидания (await), утилизацию (%util). Значениеawait> 10-20 мс часто указывает на проблему с диском.iotop— Аналогtopдля дискового I/O, показывает какие процессы активно читают/пишут.df -i— Проверка исчерпания inodes (может случиться даже при свободном месте, если много мелких файлов).
4. Сетевая диагностика:
ss -tulnpилиnetstat -tulnp— Какие процессы слушают какие порты.ssработает быстрее.iftopилиnethogs— Мониторинг сетевого трафика в реальном времени по интерфейсам (iftop) или по процессам (nethogs).tcpdump -i eth0 -n port 80— Глубокий анализ пакетов для диагностики проблем с подключением.
5. Анализ логов:
journalctl -u nginx --since "10 minutes ago" --no-pager— Просмотр логов конкретного сервиса (systemd) за последние 10 минут.tail -f /var/log/syslogилиtail -f /var/log/nginx/error.log— Отслеживание логов в реальном времени.dmesg -T | tail -20— Просмотр последних сообщений ядра (полезно при аппаратных сбоях или OOM Killer).
Сценарий: При жалобе на "медленный сервер" мой поток: 1) htop — смотрю load average и процессы, 2) vmstat 2 — проверяю наличие swap activity, 3) iostat 2 — анализирую дисковую нагрузку, 4) ss -tulnp — проверяю сетевые соединения.