> Как пользоваться программой 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-приложения, если нужно автоматически логировать потребление:
BASHwhile true; dotop -b -n 1 | grep myapp >> /var/log/myapp_top.logsleep 5done
Как отвечать на собеседовании
Начните с краткого определения и назначения. Затем перечислите 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.
> Похожие задачи по backend
Что такое аннотация в Go и зачем она нужна
Что означает строка load average в Linux
Какие виды уведомлений используются в системах (SMS, push, email и т.д.)
Какие бывают виды HTTP-запросов и их семантика
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью