Я хотел поработать над проблемой на приставке Centos 6. Я запустил dtrace, но ничего не вышло. Не принимает -n
или -l
или -P
или любые параметры командной строки. Он утверждает, что ТОЛЬКО принимает -h
, -G
, -C
, -I
, -s
, и -o
. Я подумал, что это какая-то странная вещь с Centos, поэтому пошел проверить на коробке с Fedora 22. Та же проблема. Он принимает только очень ограниченное количество параметров командной строки. Я пошел попробовать Oracle Box, который очень похож на RedHat, как Centos и похож на Fedora. Работало нормально. Я смог просто бежать dtrace
и получите длинный список всех параметров командной строки. Я вернулся к Centos и Fedora. Когда я вхожу dtrace
, вывод Usage /bin/dtrace [--help] [-h | -G] [-C [-I<Path>]] -s File.d [-o <File>]
. Итак, после часа поиска в Google я сдался. Как заставить dtrace правильно работать в Centos / Fedora? Я пробовал как root, так и пользователь. Я искал пакеты для увеличения функциональности. Я пробовал удалить и переустановить dtrace. Осталось только удалить пакет и установить dtrace из исходников.
Dtrace, который вы найдете в Oracle Linux, не dtrace, который поставляется с системным ярлыком Linux и который вы найдете в любом другом дистрибутиве Linux.
Скорее, это порт Solaris dtrace предоставляется Oracle и доступно только в Oracle Linux.
Эти две команды совершенно разные и имеют разные цели.
Стандартное средство трассировки ядра Linux известно как systemtap, а Oracle dtrace - это просто проприетарная оболочка над ним. Вы всегда можете использовать systemtap напрямую.
В dtrace
скрипт, который поставляется в дистрибутивах Linux, отличных от Oracle, - это небольшой инструмент из systemtap
проект. Он предоставляет только <sys/sdt.h>
возможность построения связанных объектов / заголовочных файлов с помощью solaris dtrace. Он отображает его в структуры данных systemtap, поэтому stap -L 'process("a.out").mark("*")
зонды будут перечислять приборы.
Теперь вы можете использовать BPFtrace!
https://github.com/iovisor/bpftrace
BPFtrace is a high-level tracing language for Linux enhanced Berkeley Packet Filter (eBPF) available in recent Linux kernels (4.x). BPFtrace uses LLVM as a backend to compile scripts to BPF-bytecode and makes use of BCC for interacting with the Linux BPF system, as well as existing Linux tracing capabilities: kernel dynamic tracing (kprobes), user-level dynamic tracing (uprobes), and tracepoints. The BPFtrace language is inspired by awk and C, and predecessor tracers such as DTrace and SystemTap. BPFtrace was created by Alastair Robertson.
Старый ответ:
You can install the Linux port of Sun/Oracle dtrace from source here:
https://github.com/dtrace4linux/linux