Блог "Дети ОИТа"
/поиск

00. Поиск неисправностей

## Алгоритм поиска неисправностей в Linux При возникновении проблемы в Linux-системе важно действовать системно, чтобы быстро локализовать и устранить неисправность. Ниже представлен универсальный ал

Алгоритм поиска неисправностей в Linux

При возникновении проблемы в Linux-системе важно действовать системно, чтобы быстро локализовать и устранить неисправность. Ниже представлен универсальный алгоритм, который подходит для большинства ситуаций — от сбоев загрузки до проблем с производительностью.

1. Определение симптомов

Чётко сформулируйте, что именно работает не так:

  • Система не загружается?
  • Зависает или тормозит?
  • Не работает сеть?
  • Не запускается конкретное приложение?
  • Появляются ошибки в консоли или логах?
  • Наблюдается нехватка памяти/диска?

2. Сбор информации

На этом этапе собираем максимум данных о состоянии системы.

2.1. Просмотр логов

  • Уровни логирования

    • 0 — EMERG (система неработоспособна);
    • 1 — ALERT (требуется немедленное вмешательство);
    • 2 — CRIT (критическое состояние);
    • 3 — ERR (ошибка);
    • 4 — WARNING (предупреждение);
    • 5 — NOTICE (всё нормально, но следует обратить внимание);
    • 6 — INFO (информационное сообщение);
    • 7 — DEBUG (отложенная печать).
  • journalctl — логи systemd со всей системы. Полезные ключи:
    -b (текущая загрузка), -f следить за новыми сообщениями, -u <служба> (логи конкретного юнита), а также уровень логирования -p задается числом от 0 до 7.

  • dmesg — кольцевой буфер ядра, содержит сообщения от загрузки и информацию об оборудовании. Полезные ключи: -w следить за новыми сообщениями, -l уровень логирования задается аналогично journalctl от 0 до 7.

  • /var/log/ — классические текстовые логи:
    syslog, messages, auth.log, kern.log, apache2/error.log и т.д.

  • Логи приложений — часто находятся в /var/log/<имя_программы>/ или задаются в конфигах.

2.2. Состояние системы

  • Нагрузка и процессы: top, htop, uptime, mpstat -P ALL, iostat -x 1.
  • Память: free -h, vmstat 1, cat /proc/meminfo.
  • Диски и файловые системы: df -Ti, df -hT, du -sh /*, lsblk, fdisk -l, smartctl -a /dev/sda (S.M.A.R.T.).
  • Сеть: ip a, ss -tulpn, netstat -i, ping, traceroute, nslookup, tcpdump.
  • Ядро и модули: uname -a, lsmod, sysctl -a.

2.3. Информация о запущенных процессах

  • ps auxf — дерево процессов.
  • lsof — список открытых файлов (можно фильтровать по процессу, порту).
  • strace -p <PID> — трассировка системных вызовов работающего процесса
    • может сильно нагрузить нагрузить систему хотя касперский этим занимается на постоянной основе

3. Анализ и локализация

На основе собранных данных попытайтесь выделить аномалии:

  • Ошибки в логах (критические сообщения, падения, таймауты).
  • Перегрузка CPU, памяти, дискового ввода-вывода.
  • Исчерпание inode’ов или места на диске
    • *Характерно для fs ext4. Изменение количества inode на уже существующей файловой системе не рекомендуется — это может привести к проблемам. Если inode закончились, ядро не может создать новый файл (в том числе временный, сокет, pid-файл) и возвращает ENOSPC. Типичные сценарии, когда inode заканчиваются раньше, чем дисковое место: миллионы мелких файлов (кэш, сессии, миниатюры, временные файлы), почтовые очереди и спул, логирование «файл на событие», слишком частая ротация.
    • Чтобы избежать проблем, рекомендуется:
      • *Мониторить inode — добавлять метрику df -i в мониторинг и алерты (например, 70/85/95% по inode).
      • Освобождать inode — например, удалять файлы, которые не нужны и больше не используются.
      • Выносить «мелкофайловые» данные на отдельный том или менять подход к хранению.
  • Неправильные права доступа к файлам/директориям (пора прекратить заниматься рукоблудием)
  • Проблемы с сетью (потеря пакетов, недоступность портов).
  • Конфликты модулей или оборудования.

4. Проверка гипотез

  • Если подозреваете нехватку памяти — посмотрите free и vmstat, проверьте, не уходят ли процессы в swap.
  • Если проблема с диском — проверьте iostat, dmesg на наличие ошибок ввода-вывода, запустите fsck 
    • Бывает полезно в комплексе других мер. Все разделы проверяются до их загрузки, это указано в /etc/fstab (крайне правый столбец). 1-только для корневой системы. 0-без проверки. 2-с меньшим приоритетом.
  • Если не запускается служба — проверьте статус systemctl status <служба>, её конфигурационные файлы, зависимости.
  • Если проблема с сетью — проверьте маршруты, firewall (iptables/nftables), работу DNS.
  • Если программа падает — запустите её под strace или проверьте дамп памяти.

5. Принятие мер

В зависимости от найденной причины:

  • Остановите/запустите/перезапустите службу.
  • Освободите место на диске (удалите ненужные логи, кеши).
  • Исправьте конфигурационный файл.
  • Переустановите или обновите проблемный пакет.
  • Добавьте ресурсы (увеличьте swap, добавьте память).
  • В крайнем случае — перезагрузка системы.

6. Проверка результата

  • Симптомы исчезли?
  • Логи перестали выдавать ошибки?
  • Приложение работает ожидаемо?
  • Нагрузка вернулась в норму?