BCC — Суперзрение для вашего Linux-сервера

02 Jul, 2026
22,547
🔱 4,062
👥 543

Знакомая ситуация: приложение в продакшене внезапно начинает тормозить, но стандартные top и iostat показывают, что всё в пределах нормы? Или нужно понять, какой именно процесс постоянно читает один и тот же файл, создавая ненужную нагрузку? Часто в таких случаях мы погружаемся в логи, пытаясь отыскать причину по косвенным признакам. А что, если бы можно было заглянуть прямо «под капот» ядра Linux и увидеть всё своими глазами, не рискуя при этом обрушить всю систему?

Именно такую возможность и даёт проект iovisor/bcc — настоящий швейцарский нож для любого, кто работает с Linux на серьёзном уровне.

Логотип BCC

Что такое BCC и при чём тут eBPF?

Если коротко, BCC (BPF Compiler Collection) — это набор инструментов и фреймворк для создания программ, которые безопасно выполняются прямо в ядре Linux. В основе всей этой магии лежит технология eBPF (extended Berkeley Packet Filter).

Представьте, что ядро Linux — это строго охраняемый объект, куда нельзя просто так зайти и что-то поменять. А eBPF — это как система пропусков для маленьких, но очень умных роботов-инспекторов. Вы пишете программу-инспектора, система проверяет, что она безопасна (не зависнет, не сломает ничего), и запускает её в «святая святых» — в самом ядре. Там ваш инспектор может наблюдать за системными вызовами, сетевыми пакетами, работой файловой системы и докладывать вам наверх обо всём, что происходит.

Реклама

Раньше для подобного требовались модули ядра, а это сложно, опасно и требует перекомпиляции при каждом обновлении. BCC же делает работу с eBPF на удивление простой, позволяя писать логику на C, а управлять всем из удобных скриптов на Python или Lua.

Чем это может быть полезно разработчику?

Самое ценное в BCC — это готовый набор утилит для диагностики производительности, сети и системных событий. Их там десятки, и каждая решает конкретную проблему. Вам не нужно быть экспертом по ядру, чтобы начать ими пользоваться.

Вот лишь несколько примеров, чтобы вы прочувствовали мощь:

1. Анализ дисковой подсистемы

  • biolatency: Показывает распределение задержек дисковых операций в виде гистограммы. Сразу видно, есть ли у вас проблемы с медленными дисками.
  • opensnoop: Отслеживает системный вызов open() в реальном времени. Незаменимая вещь, чтобы понять, какие файлы постоянно открывает ваше приложение.
  • filetop: Показывает топ файлов по количеству операций чтения/записи. Помогает найти самые «горячие» файлы в системе.
# ./bitehist.py
Tracing... Hit Ctrl-C to end.
^C
     kbytes          : count     distribution
       0 -> 1        : 3        |                                      |
       2 -> 3        : 0        |                                      |
       4 -> 7        : 211      |**********                            |
       8 -> 15       : 0        |                                      |
      16 -> 31       : 0        |                                      |
      32 -> 63       : 0        |                                      |
      64 -> 127      : 1        |                                      |
     128 -> 255      : 800      |**************************************|

На скриншоте утилита bitehist, которая показывает распределение размеров дисковых I/O. Сразу видна бимодальная картина: много мелких операций и очень много операций размером 128-255 КБ.

2. Диагностика сети

  • tcptop: Отображает сетевую активность в стиле top, показывая хосты, с которыми идёт наиболее интенсивный обмен данными.
  • tcpconnect: Трассирует попытки установки TCP-соединений. Помогает отловить проблемы с подключением к базам данных или внешним сервисам.
  • sslsniff: Позволяет перехватывать и просматривать данные, которыми обмениваются приложения через зашифрованные соединения OpenSSL. Да, вы правильно прочитали. Это невероятно мощный инструмент для отладки.

3. Профилирование производительности

  • execsnoop: Показывает все новые процессы, запускаемые в системе через exec(). Отлично подходит для аудита безопасности или поиска неожиданных дочерних процессов.
  • funccount: Считает, сколько раз была вызвана та или иная функция ядра.
  • memleak: Помогает обнаружить утечки памяти, показывая места выделения памяти, которая не была освобождена.

И это лишь верхушка айсберга. Взгляните на эту схему — она даёт представление о масштабах инструментария:

Инструменты трассировки BCC

Как это работает под капотом?

Каждая утилита BCC обычно состоит из двух частей:

  1. C-код: Небольшая программа, которая компилируется в байт-код eBPF. Именно она прикрепляется к нужным событиям в ядре (например, к вызову функции vfs_read) и собирает данные.
  2. Python-скрипт: Пользовательский интерфейс. Он загружает eBPF-программу в ядро, создаёт специальные структуры данных (карты) для обмена информацией с ней и в красивом виде выводит результаты на экран.

BCC берёт на себя всю сложную работу: компиляцию C-кода с помощью встроенного LLVM, проверку байт-кода верификатором ядра и его загрузку. Вам остаётся только запустить Python-скрипт.

Практические кейсы: когда BCC незаменим?

  • Поиск "медленных" запросов к базе данных: Утилиты dbslower и dbstat могут отслеживать запросы к MySQL/PostgreSQL, которые выполняются дольше заданного порога, прямо на уровне системных вызовов, без необходимости включать логи в самой БД.
  • Анализ задержек планировщика: Если ваше приложение "замирает" без видимых причин, утилита runqlat покажет, как долго задача ждала своей очереди на исполнение в планировщике CPU. Это может выявить проблемы с "шумными соседями" на сервере.
  • Отладка сложных сетевых взаимодействий: Нужно понять, почему контейнер не может достучаться до внешнего мира? tcpconnect и tcpdrop покажут все попытки соединений и отброшенные ядром пакеты с указанием причины.

Заключение: кому стоит попробовать BCC?

BCC — это инструмент, который должен быть в арсенале каждого DevOps/SRE инженера, специалиста по производительности и даже опытного бэкенд-разработчика, работающего с Linux. Он открывает совершенно новый уровень наблюдаемости (observability) системы.

Да, порог входа чуть выше, чем у htop, но отдача несоизмерима. Возможность безопасно и динамически подключаться к работающему ядру для анализа проблем — это настоящая суперсила.

Если вы устали отлаживать сложные проблемы, опираясь только на логи и косвенные метрики, настоятельно рекомендую заглянуть в репозиторий iovisor/bcc. Начните с готовых утилит из папки tools, и, возможно, вы уже никогда не вернётесь к старым методам диагностики.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.