Ответ
При появлении лагов на сервере я действую по методике "сверху вниз" (от общей картины к конкретной причине), используя стандартные утилиты Linux.
1. Быстрая общая диагностика: Запускаю набор команд для получения общего состояния системы за последние 1-5-15 минут и в реальном времени.
# 1. Нагрузка системы
uptime
# 2. Использование CPU, памяти, swap, IO (обновляется каждую секунду)
vmstat 1
# 3. Детализация по процессам (сортировка по CPU, потом по памяти)
top -o %CPU
# или htop, если установлен
# 4. Дисковые операции ввода-вывода
iostat -xz 1
# 5. Сетевая активность
sar -n DEV 1
2. Углубленный анализ по выявленным симптомам:
-
Высокая загрузка CPU (
%usили%syвvmstat):- Смотрю, какой процесс потребляет CPU, через
top. - Для Java-процессов беру thread dump для анализа блокировок:
jstack <PID>илиkill -3 <PID>. - Для C-подобных процессов могу использовать
perfилиstraceдля анализа системных вызовов.
- Смотрю, какой процесс потребляет CPU, через
-
Проблемы с памятью (высокий
swpd,si/soвvmstat):- Смотрю использование памяти процессами:
topилиps aux --sort=-%mem. - Проверяю кэш страниц:
free -h. Большой объём вcache— это нормально. - Ищу возможные утечки.
- Смотрю использование памяти процессами:
-
Высокая загрузка диска (большие значения
await,%utilвiostat):- Определяю, какие процессы активно работают с диском:
iotop. - Проверяю, не заполнено ли дисковое пространство:
df -h. - Анализирую, не исчерпаны ли лимиты IOPS/пропускной способности в облаке.
- Определяю, какие процессы активно работают с диском:
-
Сетевые проблемы:
- Смотрю количество соединений и их состояние:
ss -tnp. - Проверяю, нет ли переполнения очередей (
send-Q,recv-Qвss). - При подозрении на сетевую перегрузку использую
tcpdumpдля захвата трафика.
- Смотрю количество соединений и их состояние:
3. Анализ логов приложения:
# Просмотр логов systemd-сервиса за последний час
journalctl -u my-service --since "1 hour ago" -f
# Поиск ошибок в лог-файле приложения
tail -f /var/log/myapp/error.log | grep -i "error|exception|timeout"
4. Долгосрочное решение: Для предотвращения таких ситуаций в будущем настраиваю систему мониторинга (например, Prometheus + node_exporter + Grafana), которая собирает метрики системы и приложения, и алертинг (например, через Alertmanager) при достижении пороговых значений (например, CPU > 80% более 5 минут).