Котлеги, привет. Вдохновленный серией статей от Евгения Козлова про CPU, Memory Models, Concurrency, Multiprocess, Multithreading и Async, я решил написать свой цикл статей по инструментам диагностики производительности Linux с примерами.

Сегодняшний обзор я начну с тулы, которая по моему мнению является серебряной пулей в вопросах диагностики проблем с производительностью — sysdig. Конечно, чаще всего ее использование бывает избыточным, но может настать тот момент, когда обычных средств может не хватить.

Long story short — sysdig использует модуль ядра для перехвата системных вызовов и событий, что открывает нам невероятные возможности в плане диагностики. Вы буквально можете расковырять практически все что происходит у вас в системе. Можно использовать realtime‑диагностику или собрать трейс с системы за определенный период, обычно при проблемах достаточно до 5–30 секунд сбора данных.

Установка sysdig

curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash

Есть небольшой минус - sysdig требует заголовки ядра, потому что он использует модуль ядра для перехвата системных вызовов и событий. Но глобально это влияет только на скорость установки и требуется немного места. 

Допустим, у вас есть какая-то лагучая нода и базовые инструменты дигностики/логи вам не особо помогли. Давайте посмотрим на живом примере как ее использовать. 

Сбор эвентов системы и анализ

sysdig -w capture.scap -M 30

Конечно можно не использовать консольный гуй, а вытащить из трейса событий нужные данные. Но это обычно работает, если вы точно знаете что искать. Примеры:

# Вывести срезы которые доступны в этом трейсе (тут вы получите список срезов в различных категориях. 
# Например, bottlenecks - cамые медленные системные вызовы) 
root@server:~# sysdig -r capture.scap  -cl

# выведем top процессов утилирующих cpu
root@server:~# sysdig -r capture.scap -c topprocs_cpu

CPU%                Process             PID
--------------------------------------------------------------------------------
15.00%              redis-server        1095390
12.60%              redis-server        1095391
12.20%              redis-server        1095375

# Показать top файлов с которыми велась работа (R+W) 
root@server:~# sysdig -r capture.scap -c topfiles_bytes proc.name=redis-server

Bytes               Filename
--------------------------------------------------------------------------------
72.00M              /data/temp-27.rdb
40.00M              /data/temp-28.rdb
82.72KB             /proc/self/stat

Как я и сказал ранее, все эти данные есть в realtime и можно просто запустить консольный гуй csysdig, но проблема может быть плавающая. В таком случае есть шанс просто пропустить нужные данные. Поэтому, я рекомендую снимать трейс эвентов и работать с ним. 

Открываем консольный гуй csysdig и скармливаем ему capture.scap

csysdig -r ./capture.scap
Главный экран csysdig
Главный экран csysdig

После этого переходим в режим Views (F2) и можем нырять на столько глубоко на сколько у вас хватит фантазии. 

Все доступные вьюхи (по сути своей преднастроенные фильтры)
Все доступные вьюхи (по сути своей преднастроенные фильтры)

Перед нами открываются все тайны нашей системы: что именно передавалось установленным соединением определенного процесса. Сколько данных было передано, порты, ip адреса и т.д. Какие ошибки происходили в системе и в каких процессах. Какие процессы какие файлы писали с каким рейтом. Какие открывались каталоги, какие контейнеры работали и какие процессы были запущенные внутри, какие действия делали эти контейнеры. Какие происходили ошибки Page Faults. Где какой был латенси на файлах. Какие порты были открыты и сколько с них было передано данных. Этот список можно продолжать бесконечно. 

Пример вывода сетевого трафика передаваемого/читаемого с redis сервера
Пример вывода сетевого трафика передаваемого/читаемого с redis сервера

В следующий раз расскажу о более простых (но также очень полезных) инструментах первичной диагностики.

А на этом все - спасибо за внимание. При желании заглядывайте в тележку https://t.me/devopsbrain.

Комментарии (7)


  1. rezdm
    23.01.2025 19:10

    >> curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash

    Чё т немного переживаю от отакой установки.


    1. d-stream
      23.01.2025 19:10

      Но как-то прижилась эта практика..


      1. 13werwolf13
        23.01.2025 19:10

        плохая практика, отучаться надо. тем более что опакетить утилиту для своего любимого дистрибутива дело пяти минут: https://build.opensuse.org/projects/devel:tools/packages/sysdig/files/sysdig.spec


    1. alexs963
      23.01.2025 19:10

      Особенно вкупе с

      sysdig требует заголовки ядра, потому что он использует модуль ядра для перехвата системных вызовов и событий.


    1. evgeniy_kudinov
      23.01.2025 19:10

      Троянчик своими руками с сайта заблокированного для РФ

      согласен, напрягает такой подход и особенно с sudo )


  1. kompilainenn2
    23.01.2025 19:10

    Погружение в тулы

    а также в москвы и новогороды
    Нельзя написать в "инструменты" или "утилиты"?


    1. itcaat Автор
      23.01.2025 19:10

      Согласен, так лучше