Какими командами можно диагностировать базовые проблемы в Linux-системе?

«Какими командами можно диагностировать базовые проблемы в Linux-системе?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При диагностике проблем на сервере я иду по цепочке: ресурсы -> процессы -> сеть -> логи.

1. Проверка ресурсов (CPU, память, диск):

  • htop / top: Первый взгляд на нагрузку CPU и память. В htop смотрю на load average и процессы, потребляющие ресурсы.
  • free -h / vmstat 2 5: Детали по использованию RAM и свопу.
  • *df -h / `du -sh `:** Поиск заполненных разделов диска и каталогов-«пожирателей» места.
  • iostat -xz 2: Показывает утилизацию и await дисков (I/O bottleneck).

2. Анализ процессов и служб:

  • systemctl status <service>: Проверка состояния и последних логов конкретного сервиса.
  • ss -tulnp / netstat -tulnp: Показывает, какие процессы слушают какие порты (критично, если служба не стартовала).
  • ps auxf / pstree: Понимание дерева процессов.

3. Сетевая диагностика:

  • ping / mtr: Проверка базовой доступности и трассировки маршрута.
  • curl -I <url> / telnet <host> <port>: Проверка доступности конкретного HTTP-сервиса или TCP-порта.
  • nslookup <domain>: Диагностика проблем с DNS.

4. Анализ логов (ключевой этап):

  • journalctl -u <service> -f --since "10 minutes ago": Просмотр логов конкретного сервиса в реальном времени.
  • journalctl -p err -b: Показать все ошибки с последней загрузки.
  • tail -f /var/log/syslog / tail -f /var/log/nginx/error.log: Прямой просмотр логов приложения.

Пример быстрой диагностики при высокой нагрузке:

# 1. Что нагружает CPU?
top -b -n 1 | head -20
# 2. Есть ли память? Своп?
free -h
# 3. Какие диски загружены?
iostat -x 2 3 | grep -A1 "Device"
# 4. Кто слушает порты? Может, служба упала?
ss -tulnp | grep :80
# 5. Смотрим логи проблемного сервиса (например, nginx)
sudo journalctl -u nginx --since "1 hour ago" | tail -50