linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-strace

kb/commands ── Команды ── advanced

strace - какие syscall'ы делает процесс

`strace` показывает в реальном времени какие системные вызовы делает процесс и с какими аргументами. Главный инструмент когда «процесс молчит».

view as markdownaka: syscall-trace

Когда применять

  • Процесс «висит» - на каком syscall'е застрял?
  • Не открывается файл - какой именно путь и с какой ошибкой?
  • Сетевой клиент тормозит - куда коннектится и сколько ждёт?
  • Сравнить два бинаря - почему один быстрее?

Под капотом - ptrace(2). На многих системах нужен capability SYS_PTRACE или ptrace_scope=0 в sysctl.

Базовые формы

bash
strace ls /tmp                     # запустить ls под strace
strace -p 1234                     # подключиться к существующему [[process-and-pid]]
strace -f -p 1234                  # -f: следовать в дочерние процессы
strace -c ls /tmp                  # -c: только сводка (count + total time на syscall)

Фильтры

bash
strace -e trace=openat ls          # только openat()
strace -e trace=network curl URL   # только сетевые: connect, sendto, recvfrom...
strace -e trace=file ls            # все file-related: open, stat, access, read...
strace -e trace=!futex,clock_gettime ls   # ! = ИСКЛЮЧИТЬ шумные

Полезные флаги

  • -t / -tt / -ttt - таймстемпы (нарастающая точность)
  • -T - длительность каждого syscall'а в скобках после возврата
  • -y - расшифровывать file descriptor'ы в имена файлов
  • -yy - то же + типы сокетов
  • -s 256 - длиннее показывать строки в аргументах (default 32)
  • -o file.log - писать в файл вместо stderr
  • -f - следовать в child'ов (без -f strace следит только за родителем)

Типичный вывод

openat(AT_FDCWD, "/etc/passwd", O_RDONLY) = 3
read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 1234
close(3) = 0

Если syscall завершился ошибкой - это видно сразу:

openat(AT_FDCWD, "/no-such", O_RDONLY) = -1 ENOENT (No such file or directory)

strace -c для performance

Сводка выявляет «где тратится время»:

bash
strace -c -p $(pgrep -x app) -- sleep 10

▸таблица: syscall / % time / total / calls / errors

▸если 80% времени в epoll_wait - приложение ждёт I/O, всё ок

▸если 80% в futex - конкурируют локи, искать contention

Ограничения

  • Tracing замедляет процесс в 10-100x. Не использовать на проде долго.
  • Не показывает kernel-level (что внутри ядра между sys_enter и sys_exit) - для этого bpftrace / perf trace
  • Не видит процессы в другом PID-namespace'е без правильных привилегий

§ команды

bash
strace -c ls /tmp

Сводка syscall'ов команды: что чаще всего делается

bash
sudo strace -p $(pgrep -x nginx) -e trace=network

Только сетевые syscall'ы живого процесса

bash
strace -f -tt -o trace.log ./app

Детальный лог всех syscall'ов в файл, с дочерними процессами

bash
strace -y -e trace=file ls 2>&1 | head

Файловые syscall'ы с расшифровкой fd → имени файла

bash
strace -e fault=openat:error=ENOENT ls /tmp

Эмулировать сбой syscall'а - для тестирования error-handling

§ см. также

  • cmd-psps - снимок процессовps - снимок процессов в момент вызова. Два диалекта: BSD (`aux`, без дефиса) и UNIX (`-ef`, с дефисом). `-o` задаёт колонки. Для непрерывного просмотра - [[cmd-htop|htop]].
  • cmd-htophtop - интерактивный монитор процессовhtop - интерактивный TUI-монитор процессов. F-keys: F3 поиск, F4 фильтр, F5 дерево, F6 сортировка, F9 kill. Цветовые столбцы наверху, список внизу. Замена top'а везде, где доступен.
  • cmd-lsoflsof - кто что открыл`lsof` (List Open Files) показывает все открытые файлы по всем процессам. В Linux всё - файл, поэтому это и обычные файлы, и сокеты, и pipe'ы.
  • signalsСигналы (SIGTERM, SIGKILL, SIGHUP)Сигнал - асинхронное уведомление процессу от ядра или другого процесса. TERM - попроси завершиться, KILL - убей сразу, HUP - перечитай конфиг.
  • bpf-co-reBPF CO-RE - Compile Once Run EverywhereCO-RE - один скомпилированный eBPF-объект работает на разных kernel благодаря BTF (BPF Type Format). vmlinux.h - dump структур ядра. libbpf на runtime перезаписывает offsets. Заменяет BCC, не нужен LLVM в проде.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки