strace
Трассировка системных вызовов процесса. Высокий оверхед (ptrace), но универсален.
# Трассировка запущенного процесса по PID
strace -p 1234
# Только вызовы работы с файлами, с таймштампами
# Класс пишется со знаком процента; форма trace=file объявлена устаревшей
strace -e trace=%file -t -p 1234
# Трассировка с дочерними процессами, вывод в файл
strace -f -o /tmp/trace.log ./myapp
# Подсчёт вызовов и времени (summary), без вывода каждого вызова
strace -c ./myapp
# Фильтр по конкретным syscall, показать строки до 256 символов
strace -e trace=read,write -s 256 -p 1234
ltrace
Трассировка вызовов динамических библиотек (аналог strace для userspace).
# Трассировка всех библиотечных вызовов
ltrace ./myapp
# Только вызовы malloc/free с таймштампами
ltrace -e malloc+free -t ./myapp
# Подсчёт вызовов (summary)
ltrace -c ./myapp
perf trace
Низкоуровневая трассировка syscall через perf — значительно меньший оверхед, чем strace.
# Трассировка syscall конкретного процесса
perf trace -p 1234
# Только сетевые вызовы, с длительностью
perf trace -e 'connect,accept,sendto,recvfrom' -p 1234
# Трассировка команды целиком плюс сводка в конце
perf trace --with-summary ./myapp
# Системные вызовы по всей системе в течение 5 секунд
perf trace -a -- sleep 5
# Только вызовы дольше 100 мс (--duration — порог, а не длительность сеанса)
perf trace -a --duration 100
opensnoop
eBPF-инструмент: трассировка всех open()/openat() в системе в реальном времени.
# Все открытия файлов в системе
opensnoop
# Только для конкретного процесса
opensnoop -p 1234
# Только неудачные открытия (errno != 0) — поиск отсутствующих файлов
opensnoop -x
# Фильтр по имени процесса (по имени файла ключа нет)
opensnoop -n nginx
execsnoop
eBPF-инструмент: трассировка запуска новых процессов (exec()) в реальном времени.
# Все новые процессы в системе
execsnoop
# С таймштампами и аргументами командной строки
execsnoop -t
# Показать в том числе неудачные exec (поиск проблем с PATH, правами)
execsnoop -x
# Фильтр по имени команды
execsnoop -n nginx
eStrace 🟢
eBPF-замена strace с существенно меньшим оверхедом. Не использует ptrace.
# Трассировка процесса (аналог strace -p)
estrace -p 1234
# Трассировка с фильтром по syscall (-f, синтаксис близок к strace: read,write, %file)
estrace -f read,write -p 1234
# Трассировка запуска команды
estrace -- ./myapp
Примечание: eStrace менее зрелый, чем strace. Для production-отладки с минимальным оверхедом часто предпочтительнее
perf trace.
Связанные заметки
- Linux — средства диагностики производительности — обзорная карта инструментов
- Linux — справочник команд: фреймворки трассировки — более глубокий уровень трассировки
- TLPI — база знаний — системные вызовы Linux с точки зрения программиста
- Вход в ядро и переключение контекста — та же граница со стороны того, кто её реализует: механика входа, кадр входа, стоимость перехода
Из библиотеки института уносят только знания. Читателей здесь не считают: посещение не регистрируется, отметок в издании не остаётся, счётчиков нет ни у одного издания фонда.
Издание пополняется и пересверяется. Текст доступен на условиях CC BY-SA 4.0 — унесённое можно передавать дальше на тех же условиях.