> Как пользоваться программой top в Linux (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: VK

Стек: Go

> Пример ответа

Короткий ответ

top - интерактивная утилита для мониторинга процессов и системных ресурсов в реальном времени. Основные возможности: сортировка по CPU или памяти (клавиши P и M), фильтрация по пользователю (u), просмотр потоков (H), изменение интервала обновления (s). Ключевые поля: %CPU, %MEM, RES, SHR, STATE. Для batch-режима используется top -b -n 1, что удобно для скриптов и диагностики. Важно понимать, что %CPU может превышать 100% для многопоточных процессов.

Подробное объяснение

top работает с данными из /proc - виртуальной файловой системы ядра. При запуске она считывает состояние всех процессов и обновляет его с заданным интервалом (по умолчанию 3 секунды). Основные секции вывода:

  • Header - uptime, load average, количество задач, состояние CPU (us, sy, ni, id, wa, hi, si, st), использование памяти (total, free, used, buff/cache) и swap.
  • Process list - таблица процессов с полями: PID, USER, PR (приоритет), NI (nice), VIRT (виртуальная память), RES (физическая память), SHR (разделяемая память), S (состояние), %CPU, %MEM, TIME+ (накопленное CPU-время), COMMAND.

Интерактивные команды:

  • 1 - показать статистику по каждому ядру CPU.
  • c - полная командная строка вместо имени процесса.
  • x и y - подсветка колонки сортировки и запущенных процессов.
  • k - отправить сигнал процессу (по умолчанию SIGTERM).
  • r - изменить nice-значение процесса.
  • f - настройка отображаемых колонок.
  • o - фильтрация по условию (например, COMMAND=nginx).
  • W - сохранить текущую конфигурацию в ~/.toprc.

Для анализа узких мест важно различать VIRT и RES: VIRT включает все зарезервированное адресное пространство (включая shared libraries и mmap), RES - фактически используемые физические страницы. SHR показывает разделяемую память, что критично для Go-приложений с большим количеством горутин.

На практике

Для backend-разработчика на Go top полезен для:

  • Проверки утечек памяти: мониторинг RES в течение времени. Если RES стабильно растет - есть утечка (например, горутины или глобальные кэши).
  • Оценки влияния GC: высокий %CPU в режиме sy (system) может указывать на частые syscalls, а wa (I/O wait) - на блокировки на диске.
  • Быстрой проверки, какой процесс потребляет ресурсы на продакшене перед деплоем.
  • Сравнения поведения до и после нагрузочного теста.

Для Go-специфики: top не показывает количество горутин. Для этого нужно использовать SIGQUIT (получение stack trace) или pprof. Но top помогает выявить симптомы - высокий CPU или память, после чего уже подключается pprof.

Пример кода

Batch-режим для скриптов:

BASH
# Один снимок каждые 2 секунды, 5 итераций
top -b -d 2 -n 5 | grep -E "PID|nginx|myapp"
# Сортировка по памяти, вывод в файл
top -b -o %MEM -n 1 > /tmp/top_snapshot.txt
# Фильтрация по процессу
top -b -n 1 -p $(pgrep -f myapp | head -1)

Для Go-приложения, если нужно автоматически логировать потребление:

BASH
while true; do
top -b -n 1 | grep myapp >> /var/log/myapp_top.log
sleep 5
done

Как отвечать на собеседовании

Начните с краткого определения и назначения. Затем перечислите 3-4 ключевые интерактивные команды, которые реально используете. Обязательно упомяните batch-режим и отличие VIRT от RES. Если спросят про Go - свяжите top с диагностикой: сначала top показывает симптом, потом pprof - причину. Не углубляйтесь в каждую колонку, но покажите понимание %CPU для многопоточных процессов. Хорошо добавить пример из практики: "когда я вижу высокий wa, я проверяю disk I/O через iostat". Держите ответ структурированным: определение → основные возможности → практический сценарий.

Что проверяет интервьюер

  • Понимание разницы между VIRT, RES, SHR - это показывает знание управления памятью в Linux.
  • Умение работать с интерактивным режимом - признак реального опыта, а не заученной теории.
  • Знание batch-режима - важно для автоматизации и скриптов.
  • Способность связать инструмент с конкретной задачей (например, поиск утечки памяти).
  • Понимание ограничений top (нет данных о сетевых соединениях, нет истории) - показывает системное мышление.

Типичные ошибки

  • Путаница между %CPU и TIME+: %CPU - мгновенное значение, TIME+ - накопленное.
  • Утверждение, что %CPU не может быть больше 100 - для многопоточных процессов это нормально.
  • Игнорирование wa (I/O wait) - часто причина высокого %CPU не в вычислениях, а в ожидании диска.
  • Использование top для поиска сетевых проблем - для этого есть ss, netstat, iftop.
  • Забывают про H для просмотра потоков - критично для Go, где один процесс может иметь тысячи потоков.
  • Не учитывают, что top сам потребляет ресурсы при частом обновлении - на нагруженном сервере лучше использовать -b -n 1.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью